首页 > 解决方案 > python获取每个成员只出现一次的组合组

问题描述

我试图让每个成员只出现一次的排列/组合组(r = 2)

我使用 python 'combinations' 包来进行组合。

例如:成员是:a,b,c,d。 组合是:[a,b],[a,c],[a,d],[b,c],[b,d]...

我想要的输出是: [ {[a,b],[c,d]},{[a,c],[b,d]},{[a,d],[b,c]}... ]

我想知道该案例的术语是什么,以及是否已经实施了该案例。

谢谢。

标签: pythonnumpycombinationspermutation

解决方案


这是一种方法:

from itertools import combinations, chain
l = ['a','b','c','d']
c = list(combinations(l,2))
[set(i) for i in list(combinations(c,2)) if (len(set(l) & set(chain(*i))) == len(l))]
[{('a', 'b'), ('c', 'd')}, {('a', 'c'), ('b', 'd')}, {('a', 'd'), ('b', 'c')}]

解释

您可以使用itertools.combinations两次,以便从以下位置获取所有 2 个元组组合:

list(combinations(l,2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

len(set(l) & set(chain(*i))) == len(l))对于每个可能的组合,只选择那些元素集与原始列表相交的元素。


推荐阅读