Python - 迭代未知数量的变量

标签 python loops iteration

假设我有一个列表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/

相关文章:

python - 如何在循环内自动调用下一个迭代器

swift - 在 Swift 3 中向后迭代时安全地删除项目

python - 从 Bash getenv 运行未定义

arrays - 使用 zip() 迭代多个数组时出现 "Extra argument in call"错误

python - 使用 Xampp 运行 Python 脚本

Python遍历字符

r - 循环: skip a certain type of error (R)

javascript - jquery every() 迭代

python - 从异步 celery worker 发出的 SocketIO 不工作

python - flake8 2.4.0 不支持 pep8 1.6.2 版本?