我怎样才能生成这个?

时间:2018-05-05 10:38:50

标签: python python-3.x list

给定list,例如[3, 2, 4],如何生成以下输出?

[0, 0, 0]
[0, 0, 1]
[0, 0, 2]
[0, 0, 3]
[0, 0, 4]
[0, 1, 0]
[0, 1, 1]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 2, 0]
[0, 2, 1]
[0, 2, 2]
[0, 2, 3]
[0, 2, 4]
[1, 0, 0]
...
[1, 2, 4]
...
[3, 2, 4]

我需要生成每个列表的可能列表,其中列表的每个元素都是正数,并且不大于相关索引处给出的数字。

我知道这涉及for循环,但我正在寻找可以处理不同大小的列表的最有效方式(可能使用生成器)。

2 个答案:

答案 0 :(得分:6)

itertools.product()可以完成这项工作:

from itertools import product
l = [3,2,4]
print(*product(*[range(i+1) for i in l]), sep='\n')

会打印:

(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)
(0, 1, 0)
(0, 1, 1)
(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 2, 0)
(0, 2, 1)
(0, 2, 2)
(0, 2, 3)
(0, 2, 4)
(1, 0, 0)
(1, 0, 1)
(1, 0, 2)
...
(3, 2, 3)
(3, 2, 4)

答案 1 :(得分:0)

[[x, y, z] for x in range(3+1) for y in range(2+1) for z in range(4+1)]正是您要找的。

编辑:如果您的输入中包含可变数量的元素,则不是您的解决方案。