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

时间:2018-06-01 05:05:11

标签: python loops dynamic nested-loops

我想创建一个代码,可以迭代动态数量(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上不起作用。 你能帮我解决一下这个问题。谢谢!

2 个答案:

答案 0 :(得分:1)

因此,如果我正确理解您的问题,您希望迭代的值为[-3, -5, -3], [-2, -4, -2]...。这可以通过python内置的zip函数轻松完成:

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

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

答案 1 :(得分:0)

您的代码相当于itertools.product

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