【问题标题】:Python: Dynamic nested for loops each with different rangePython:动态嵌套的for循环,每个循环都有不同的范围
【发布时间】:2018-11-11 04:21:08
【问题描述】:

我想创建一个代码,它可以迭代一个动态数量 (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


【解决方案1】:

你的代码相当于itertools.product:

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

【讨论】:

  • 谢谢。我使用此代码 v=list(itertools.product(*ranges)) for i in range(len(v)): var=v[i] do Something with var
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多