我想创建一个代码,可以迭代动态数量(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上不起作用。你能帮我解决一下这个问题。谢谢!
您的代码相当于itertools.product
:
print(list(itertools.product(*ranges)))
所以,如果我正确理解你的问题,你希望迭代的值是[-3, -5, -3], [-2, -4, -2]...
。使用python中内置的zip函数可以很容易地实现这一点:
for x in zip(*ranges):
# Do something with x
x将取所有第一个值的元组,然后是所有第二个值的元组等,在最短列表结束时停止。使用这个*
splat表示法甚至不必知道要组合的列表的数量。