我想创建数字列表有三个值,并想覆盖从0每一个组合的名单 - 3。例如:创建组合
0, 0, 0
0, 0, 1
...
1, 0, 3
1, 1, 3
一路3, 3, 3
。
有没有比使用多个for循环更好的方法吗?
这里是我使用的代码:
for i in range (0, 4):
for x in range (0, 4):
for t in range (0, 4):
assign = [i, x, t]
我想创建数字列表有三个值,并想覆盖从0每一个组合的名单 - 3。例如:创建组合
0, 0, 0
0, 0, 1
...
1, 0, 3
1, 1, 3
一路3, 3, 3
。
有没有比使用多个for循环更好的方法吗?
这里是我使用的代码:
for i in range (0, 4):
for x in range (0, 4):
for t in range (0, 4):
assign = [i, x, t]
list(itertools.product(range(4), repeat=3))
您可以使用itertools.product
:
>>> from itertools import product
>>> list(product({0, 1, 2, 3}, repeat=3))
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 2, 0), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 3, 0), (0, 3, 1), (0, 3, 2), (0, 3, 3), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 0), (1, 3, 1), (1, 3, 2), (1, 3, 3), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 0), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 0, 0), (3, 0, 1), (3, 0, 2), (3, 0, 3), (3, 1, 0), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 0), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 0), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
>>>
可以使用itertools.product()
功能那个:
from itertools import product
for i, x, t in product(range(4), repeat=3):
print (i, x, t)
演示:
>>> from itertools import product
>>> for i, x, t in product(range(4), repeat=3):
... print (i, x, t)
...
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 1, 0)
# ... truncated for readability ...
(3, 2, 3)
(3, 3, 0)
(3, 3, 1)
(3, 3, 2)
(3, 3, 3)
的itertools.product()
是一个很好的解决方案,但如果你万一要列表,而不是一个元组列表,你可以这样做:
[ [x,y,z] for x,y,z in itertools.product(range(4), repeat=3)]
或相当的列表理解:
[ [x,y,z] for x in range(0,4)
for y in range(0,4)
for z in range(0,4)]