给定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
循环,但我正在寻找可以处理不同大小的列表的最有效方式(可能使用生成器)。
答案 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)]
正是您要找的。 p>
编辑:如果您的输入中包含可变数量的元素,则不是您的解决方案。