在列表中的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:]) 
+0

出了什么问题? – tdelaney

+0

你想最终的结果是一个拥有多个列表的单个集合吗?列表不可散列,所以这是行不通的。 – tdelaney

+0

考虑发布一个正在运行的示例(或尽可能接近)。例如,'meine_liste_len'不存在。如果我要发布一个解决方案,我必须弄清楚这些变量是什么,然后添加进去。你应该为我们做这件事。 – tdelaney

您可以使用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

非常感谢你!我甚至不知道可以在一个函数中使用“&”。 –