假设我有一个列表range_list
,其长度先验未知。例如,range_list = [2,5,4,10]
我想按以下方式迭代:
for i in range(range_list[0]):
for j in range(range_list[1]):
for k in range(range_list[2]):
for l in range(range_list[3]):
但是,由于 range_list
的长度不固定,因此我无法像上面那样嵌套有限数量的 for 循环。
我已尝试按以下方式使用(未成功)zip
函数:
range_list_2
for i in range(len(range_list)):
range_list_2.append(range(range_list[i]))
for i in zip(*range_list_2):
print(i)
结果我会期待
(0,0,0,0)
(1,0,0,0)
(0,1,0,0)
...
最佳答案
您可以使用itertools.product()
:
| product(*iterables, repeat=1) --> product object
|
| Cartesian product of input iterables. Equivalent to nested for-loops.
|
| For example, product(A, B) returns the same as: ((x,y) for x in A for y in B).
| The leftmost iterators are in the outermost for-loop, so the output tuples
| cycle in a manner similar to an odometer (with the rightmost element changing
| on every iteration).
例如:
from itertools import product
range_list = [2, 4, 3]
for i in product(*map(range, range_list)):
print(i)
(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)
(0, 3, 0)
(0, 3, 1)
(0, 3, 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)
(1, 3, 0)
(1, 3, 1)
(1, 3, 2)
关于Python - 迭代未知数量的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71276252/