如何在不同的集合中创建元素的组合?

时间:2016-12-21 09:42:26

标签: python python-2.7 cartesian-product

假设我有n个列表并且它们不是不相交的。我想制作n个元素的每个组合,我从每个列表中得到一个,但在该组合中有不同的元素,并且没有双重组合。因此,[1,1,2]不被允许,[1,2,3][2,1,3]相同。

例如,我有A=[1,2,3]B=[2,4,1]C=[1,5,3]。所以,我想要的输出是[[1,2,5],[1,2,3],[1,4,5],[1,4,3],[2,4,1],[2,4,5],[2,4,3],[3,2,5],[3,4,5],[3,1,5]]

我有搜索谷歌,我认为模块product中的函数itertools可以做到这一点。但是,我不知道如何在每个组合中都没有相同的元素,也没有双重组合。

2 个答案:

答案 0 :(得分:2)

可能是这样的:

from itertools import product                                               
A=[1,2,3]
B=[2,4,1]
C=[1,5,3]
L = list(set([ tuple(sorted(l)) for l in product(A,B,C) if len(set(l))==3 ]))

当然,如果您使用超过3个列表,则必须更改3相关值。

答案 1 :(得分:0)

这是怎么回事?以排序的排列为关键创建一个dicitonary。仅当所有三个整数都不同时才接受值:

from itertools import product
A=[1,2,3]
B=[2,4,1]
C=[1,5,3]

LEN = 3

dct = {tuple(sorted(item)): item for item in product(A,B,C) 
       if len(set(item)) == LEN}

print(dct)
vals = list(dct.values())
print(vals)
相关问题