2013-07-25 87 views
-1

所以給那麼集{'a', 'b', 'c'},{'c', 'd'},{'d','e','f'}。我想得到像列表[{'a', 'b', 'c'}, {'d'}, {'e','f'}]。我的第一個猜測是,這會適合遞歸。 set 1,set2 - set1,set3 - (set1 & set2)。我認爲我對遞歸函數的經驗更多地沿着向另一個方向移動的因子例子。預先感謝您的幫助。我想創建一個Python集合交集的列表

+0

您能詳細說明輸出的內容嗎?這個問題的起源是什麼?這三個集合的交集是空集{}。 –

+1

@TomRose在問題'['','b','c'},{'d'},{'e','f'}]' – woozyking

+0

@agf這是一個很好的問題,但他沒有:「包括嘗試的解決方案,爲什麼他們不工作。」他只需要編輯它。 –

回答

3

可以用遞歸來做到這一點,但不是必要的。這很容易做到迭代:

>>> sets = {'a', 'b', 'c'}, {'c', 'd'}, {'d','e','f'} 
>>> unique = [] 
>>> seen = set() 
>>> for s in sets: 
... unique.append(s - seen) 
... seen |= s 
... 
>>> seen 
set(['a', 'c', 'b', 'e', 'd', 'f']) 
>>> unique 
[set(['a', 'c', 'b']), set(['d']), set(['e', 'f'])] 
+0

解釋''='巫術plz – Stephan

+2

@Stephan http://docs.python.org/2/library/stdtypes.html#set.update – agf

0

我喜歡python,因爲它的列表和設置解析。我認爲這個問題突出了這個功能的便利性。

seta = {'a', 'b', 'c'} 
setb = {'c', 'd'} 
setc = {'d','e','f'} 

list_of_sets = [seta, {b for b in setb: if b not in seta}, {c for c in setc: if c not in seta}] 
+0

這不會擴大到更多的集合,這是他在想什麼時候他談到了遞歸。 – agf