在python中生成组合

Posted

技术标签:

【中文标题】在python中生成组合【英文标题】:Generating Combinations in python 【发布时间】:2011-03-11 08:01:55 【问题描述】:

如果可能的话,我不确定如何在 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 个元素 * 每个 class= 64 行的 16 种可能组合

我希望有一种方法可以在 python 中做到这一点。我确信有,但我不确定最有效的方法是什么。也许是一个“for in”循环语句,它遍历每个类的每个元素?或者现在我正在研究这个,itertools 会处理这个吗?

提前感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

你想要的叫做Cartesian product:

import itertools

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

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

【讨论】:

@FM-完美!非常感谢。【参考方案2】:

最简单的方法:

for i in Class1:
    for j in Class2:
        for k in Class3:
            print (i,j,k)

【讨论】:

不幸的是,这是一种立方方法。 有没有办法不存在? 这是可能的最佳时间复杂度。在实践中,itertools 可能会更快。【参考方案3】:

检查 Python itertools 标准 module:

itertools.combinations(iterable, r)

从输入迭代中返回 r 个长度的元素子序列。

【讨论】:

以上是关于在python中生成组合的主要内容,如果未能解决你的问题,请参考以下文章

在Python中生成颜色范围

在python中生成组合

在Matlab中生成包含给定集合中至少一个元素的所有组合

python 从列表中生成唯一值的组合

如何在块中生成组合

在sql中生成数据组合