Python中的参数化嵌套循环

时间:2018-10-16 15:32:47

标签: python loops for-loop parameters nested

模型中的一个参数控制数组的维数;它的范围可以从1到任何正整数:对于我来说,最大为20。
程序的流程经过多个循环,具体取决于此维度。

例如,如果参数的值为1,我将拥有:

for i1 in range(0,100,1):
   do stuff

如果参数的值为2,那么我将得到类似的信息:

for i1 in range (0,100,1):
    for i2 in range (0,100,1):
        do stuff 

或者,如果参数的值为3,我将拥有:

for i1 in range (0,100,1):
    for i2 in range (0,100,1):
        for i3 in range (0,100,1):
            do stuff

尺寸可以更改,因此无法预先指定需要多少个嵌套循环;这必须以某种参数化方式编写。

2 个答案:

答案 0 :(得分:1)

由于您没有在中间循环中列出任何处理-仅在最内部的循环中,我觉得您真正需要的是索引序列的迭代器:

max_dim为您空间的维度,即维度的数量。

max_val = 100
one_dim = list(range(max_val))
all_dim = [one_dim] * max_val

all_dim现在是一个列表列表,每个维度一个。每个列表包含值0-99,这是嵌套循环使用的值。现在开始从itertools开始的神奇步骤:

from itertools import product
for index_list in product(*all_dim):
    # do your stuff; the index_list is [i1, i2, i3, ...]

这将迭代您想要的尺寸。举个小例子,这是product序列在只有两个值和三个维度的情况下的样子:

>>> all_dim = [[0,1]] * 3
>>> all_dim
[[0, 1], [0, 1], [0, 1]]
>>> list(product(*all_dim))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

这样足以解决您的问题吗?

答案 1 :(得分:0)

对可变深度的嵌套循环使用递归。

def nested(parameters, depth):
    for x in range(0,100,1):
        if depth==0:
            do
        else:
            nested(parameters, depth-1)