查找集合列表

时间:2016-10-02 13:50:11

标签: python python-2.7 set combinations

我使用的是python 2.7。给定一组集合,是否有任何快速有效的方法来生成组合?输入集在每组中始终有一个项目,输出集的长度均为2

从:

[set(['item1']), set(['item2']), set(['item3'])]

要:

[set(['item1','item2']), set(['item2','item3']), set(['item3','item1'])]

2 个答案:

答案 0 :(得分:3)

由于集合列表中的元素都是1元素集,因此您要查找的组合只是这些集合的2元素子集。你可以这样获得它们:

>>> import itertools

>>> sets = [set(['item1']), set(['item2']), set(['item3'])]
>>> elements = set()
>>> for s in sets: elements.update(s)

从而

>>> elements
{'item1', 'item2', 'item3'}

然后,就这样:

>>> pairs = [set(combo) for combo in itertools.combinations(elements,2)]
>>> pairs
[{'item1', 'item2'}, {'item1', 'item3'}, {'item2', 'item3'}]

答案 1 :(得分:1)

约翰指出webbrowser可能会有所帮助。这是一个简单的例子:

import webbrowser
url = ...
webbrowser.open(url, autoraise=True) # normal
webbrowser.open_new(url)             # new window
webbrowser.open_new_tab(url)         # new tab

输出:itertools

然后在每次迭代中创建一个交集:

import itertools as it
sets = [set(range(0, 3)), set(range(2, 5)), set(range(4, 7))]
comb = list(it.combinations(sets, r=2))
comb

输出:[({0, 1, 2}, {2, 3, 4}), ({0, 1, 2}, {4, 5, 6}), ({2, 3, 4}, {4, 5, 6})]