Python:动态嵌套for循环,每个循环具有不同的范围

问题描述 投票:-2回答:2

我想创建一个代码,可以迭代动态数量(N)的嵌套循环,每个循环具有不同的范围。例如:

N=3 
ranges=[[-3, -2, -1, 0, 1, 2, 3],
 [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
  [-3, -2, -1, 0, 1, 2, 3]]

for x in ranges[0]:
    for y in ranges[1]:
        for z in range[2]:
            variable=[x, y, z]

我是python的新手。当我查看此处发布的类似问题时,我理解这可以通过递归或itertools来完成。但是,没有一个答案解决了每个级别不同范围的问题。最接近的类似于我的问题是Variable number of nested for loops with fixed range。但是,user633183发布的答案是用python 3.X编写的,我在python 2.7编码,所以我无法实现它,因为它的一些代码在python 2.7上不起作用。你能帮我解决一下这个问题。谢谢!

python loops dynamic nested-loops
2个回答
0
投票

您的代码相当于itertools.product

print(list(itertools.product(*ranges)))

0
投票

所以,如果我正确理解你的问题,你希望迭代的值是[-3, -5, -3], [-2, -4, -2]...。使用python中内置的zip函数可以很容易地实现这一点:

for x in zip(*ranges):
    # Do something with x

x将取所有第一个值的元组,然后是所有第二个值的元组等,在最短列表结束时停止。使用这个* splat表示法甚至不必知道要组合的列表的数量。

© www.soinside.com 2019 - 2024. All rights reserved.