[英]Find in python combinations of mutually exclusive sets from a list's elements
[英]Find combinations of a list of sets
我正在使用 python 2.7。 给定一组集合,是否有任何快速有效的方法来生成组合? 输入集在每个集中总是有一个项目,输出集的长度都是 2
从:
[set(['item1']), set(['item2']), set(['item3'])]
到:
[set(['item1','item2']), set(['item2','item3']), set(['item3','item1'])]
由于集合列表中的元素都是 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'}]
正如约翰指出的那样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})]
然后在每次迭代中创建一个交集:
comb_sets = [a.intersection(b) for a, b in comb]
comb_sets
输出: [{2}, set(), {4}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.