如何计算列表的所有组合

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]]

【讨论】:

非常感谢,这正是我所需要的。同时,元素的数量及其范围是变量。我猜有可能用循环来做到这一点?

以上是关于如何计算列表的所有组合的主要内容,如果未能解决你的问题,请参考以下文章

如何从列表中创建唯一的非重复对组合

如何计算图像中的 RGB 或 HSV 通道组合?

如何获得多个列表的所有可能组合? [复制]

在 Perl 中,如何生成列表的所有可能组合?

如何从Python中列表的dict中的值生成所有组合

如何从所有排列中生成所有可能的组合?