在列表中的python pairwise交集
问题描述:
有一个集合的列表,我想有一个列表,第一个集合与第二个,第二个与第三个之间的交集,依此类推。 例如:在列表中的python pairwise交集
list_of_sets=[set([1,2,3,4,5]),set([1,2,3,5]),set([4,5,6])
meine_liste_len=len(list_of_sets)
pairwise_intersection_list=[]
for x in range(0,meine_liste_len-1):
for y in range(1,meine_liste_len):
pairwise_intersection_list.append(set x.intersection(set(y)))
我想有
pairwise_intersection_list=set(([1,2,3]),([5]))
的结果。
第一个答案是非常好的一个,它不需要导入模块。另外一个(使用ZIP)将是:
pairwiseintersect_list=([i.intersection(j) for i,j inzip(list_of_sets,list_of_sets[1:])
答
您可以使用range(0, len(list_of_sets) - 1)
让所有的索引,但在列表的最后一个成员。然后两个相邻的组只是索引和索引+ 1。使用该列表理解,你会得到
>>> list_of_sets=[set([1,2,3,4,5]),set([1,2,3,5]),set([4,5,6])]
>>> new_list = [list_of_sets[i] & list_of_sets[i+1] for i in range(0, len(list_of_sets)-1)]
>>> new_list
[{1, 2, 3, 5}, {5}]
+0
非常感谢你!我甚至不知道可以在一个函数中使用“&”。 –
出了什么问题? – tdelaney
你想最终的结果是一个拥有多个列表的单个集合吗?列表不可散列,所以这是行不通的。 – tdelaney
考虑发布一个正在运行的示例(或尽可能接近)。例如,'meine_liste_len'不存在。如果我要发布一个解决方案,我必须弄清楚这些变量是什么,然后添加进去。你应该为我们做这件事。 – tdelaney