2016-02-28 60 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) 

正常工作将解开你的组列表,找到交集。