在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中生成组合的主要内容,如果未能解决你的问题,请参考以下文章