递归替换循环n次

时间:2014-09-24 16:39:53

标签: python loops recursion

我的问题与此处的问题非常类似: Function with varying number of For Loops (python)

然而,我真正想要的是例如:

def loop_rec(n):
    for i in range(n):
        for j in range(n):
            for k in range(n):
                #... n loops
                    #Do something with i, j and k 
                    #Such as i+j+k

链接中的示例不允许索引x变化。

类似于该问题中提出的答案,但使用索引而不仅仅是x。

def loop_rec(y, n):
    if n >= 1:
        for x in range(y): # Not just x
            loop_rec(y, n - 1)
    else:
       whatever()

由于

1 个答案:

答案 0 :(得分:1)

对于需要处理多个嵌套循环的问题,python标准库提供了一个名为itertools.product的方便工具

在您的特定情况下,您所要做的就是用itertools.product包装范围,并通过repeat参数指定嵌套循环的数量。 itertools.product,必然会执行笛卡尔积。

def loop_rec(y, n):
    from itertools import product
    for elems in product(range(y),repeat=n):
        # sum(args)
        # x,y,z ....(n) terms = elems 
        # index elems as elems[0], elems[1], ....

根据您的要求,您可能希望使用每个笛卡尔积的整个元组,或者可能想要单独索引元组,或者如果您知道循环深度,则可以将其分配给变量。

  

谢谢,但如果我想改变每个循环的范围,即如何。一世   在范围(n)中,j在范围(n-1)中,k在范围(n-2)

假设您想要改变从m到n的范围,即范围(n),范围(n-1),范围(n-2),......范围(m)。您可以将产品重写为

product(*map(range, range(m,n)))