如何计算列表的所有组合
Posted
技术标签:
【中文标题】如何计算列表的所有组合【英文标题】:How to calculate all the combinations of lists 【发布时间】:2017-12-27 14:02:18 【问题描述】:我遇到了一个 Python 问题,希望有人能帮助我。
问题其实很简单。
我正在尝试构建具有所有可能组合的列表,但列表中的元素范围不同。
这是我的代码,我尝试用 for 循环做一些事情,但它不起作用。
for j in range(0,size):
for k, val in enumerate(self.Algo.Inputs[j].Values):
self.Commandlist[j] = k
self.Commandlist 是一个有固定范围的列表,首先用零填充。
self.Commandlist = [0,0,0]
self.Algo.Inputs[j].Values 给我每个元素的大小,例如,如果 self.Algo.Inputs[0].Values = 4 self.Algo.Inputs[1].Values = 1 self.Algo.Inputs[2].Values = 2
我想要所有的组合,[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[ 0,1,0],[1,1,0],[2,1,0],[3,1,0],[4,1,0] 等等。
我想我忘记了一个循环,但我想不通。我也尝试了一些使用 itertools 模块的东西,但我无法让它工作。
感谢您的帮助。
【问题讨论】:
对于预期的输出,您需要 range(x)..eg 0,1,...x-1 的所有可能组合; 1,0,2,....x-1;等等? 您可能希望使用itertools
模块。
【参考方案1】:
如前所述,您可以使用 itertools,例如:
import itertools
a = b = c = range(3) # you can specify different range for each one
[list(x) for x in list(itertools.product(a, b, c))]
结果:
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 1, 2 ], [0, 2, 0], [0, 2, 1], [0, 2, 2], [1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 1, 0], [1, 1, 1], [1, 1, 2], [1, 2, 0], [1, 2, 1], [1, 2, 2], [2 , 0, 0], [2, 0, 1], [2, 0, 2], [2, 1, 0], [2, 1, 1], [2, 1, 2], [2, 2 , 0], [2, 2, 1], [2, 2, 2]]
【讨论】:
非常感谢,这正是我所需要的。同时,元素的数量及其范围是变量。我猜有可能用循环来做到这一点?以上是关于如何计算列表的所有组合的主要内容,如果未能解决你的问题,请参考以下文章