在Python中生成组合

18

我不确定如何在Python中实现,是否可能创建一个数组(或矩阵,向量等),该数组由3个单独的数组组成。每个数组都有4个元素,返回如下:

Class1 = [1,2,3,4] Class2 = [1,2,3,4] Class3 = [1,2,3,4]

现在我想要做的是返回这三个类的所有可能组合。

例如:

1 1 1
2 1 1
3 1 1
4 1 1
1 2 1
2 2 1
3 2 1
4 2 1...

...等等,共64行(每个类的4个元素*16种可能的组合= 64行)

我希望有一种方法可以在Python中实现这个目标。我相信这是可能的,但我不确定最有效的方法是什么。也许可以使用“for in”循环语句迭代每个类的每个元素?或者现在我正在研究这个问题,是否可以使用itertools来处理呢?

感谢提前提供任何帮助。

3个回答

43
您需要的是称为“笛卡尔积”的东西:Cartesian product
import itertools

iterables = [ [1,2,3,4], [88,99], ['a','b'] ]

for t in itertools.product(*iterables):
    print t

9
最简单的方法是:
for i in Class1:
    for j in Class2:
        for k in Class3:
            print (i,j,k)

1
不幸的是,这是一种立方级的方法。 - urb
有没有不被的方法? - Aif
这是最佳的时间复杂度。在实践中,itertools 可能会更快。 - marcv81

2

请查看Python的itertools标准模块:

itertools.combinations(iterable, r)

从输入可迭代对象中返回长度为r的子序列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接