2016-02-28 64 views
0

你的套任意數量的列表,例如:尋找對相交集的任意集

sets = [{1,2,3}, {3,4,5}, {5,6,7}] 

你想看看在一組的任何值也是其他任何設置。什麼是最有效的方法來做到這一點?

目前,我有以下幾點:

index = 0 
for set in sets: 
    for i in range(index + 1, len(sets)): 
     print set, sets[i], set & sets[i] 
    index += 1 

導致:

set([1, 2, 3]) set([3, 4, 5]) set([3]) 
set([1, 2, 3]) set([5, 6, 7]) set([]) 
set([3, 4, 5]) set([5, 6, 7]) set([5]) 
+1

如果此代碼正在工作,您應該去http://www.codereview.stackexchange.com。我們在這裏幫助您解決*糟糕的代碼。 – zondo

+1

你希望你的輸出看起來像你的例子?我的意思是,你繼續使用的數據結構。現在你只是在印刷。 – timgeb

+0

@timgeb我實際上是在單元測試中做這件事。而不是打印,我會'assertFalse(set&sets [i])'來證明任何集合中都沒有相交的值。我使用'print'來提供更清晰的問題。 –

回答

2

它的一個小調整,但你可以讓itertools.combinations產生對集合爲您服務。這個例子是巨蟒-3這樣表示看起來有些不同,但應在2.X

>>> import itertools 
>>> sets = [{1,2,3}, {3,4,5}, {5,6,7}] 
>>> for s1,s2 in itertools.combinations(sets,2): 
...  print(s1, s2, s1 & s2) 
... 
{1, 2, 3} {3, 4, 5} {3} 
{1, 2, 3} {5, 6, 7} set() 
{3, 4, 5} {5, 6, 7} {5} 
-1
set.intersection(*list_of_sets) 

正常工作將解開你的組列表,找到交集。