2017-04-23 267 views
0

有一個集合的列表,我想有一個列表,第一個集合與第二個,第二個與第三個之間的交集,依此類推。 例如:在列表中的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

回答

0

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

非常感謝你!我甚至不知道可以在一個函數中使用「&」。 –