簡體   English   中英

查找集合列表的組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM