python - 递归代替循环n次

标签 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()

谢谢

最佳答案

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

在您的特定情况下,您所要做的就是用 itertools.product 包裹范围。 ,并通过重复参数指定嵌套循环的数量。 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], ....

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

Thanks, but what if I wanted to change the range for each loop, ie. i in range(n), j in range(n-1), k in range(n-2)

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

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

.

关于python - 递归代替循环n次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022169/

相关文章:

python - opencv python 将不同 channel 的图像合并为一个

Python:如何转储 mechanize.Browser 实例的 cookie?

python - 从最小值开始对嵌套字典中的值进行排序。至最大

java - 在java中哪个循环最适合迭代集合

algorithm - 获取列表列表的类笛卡尔积,长度不等,函数 ('a -> ' b list) 应用于每个项目

javascript - 如何基于 api 调用遍历树/数组 -Javascript

python - 尝试使用请求库 Python 发送视频时出错

javascript - 协助将 javascript 函数包含在循环中 (PHP)

python - 使用 for 循环从矩阵集合中删除(每个矩阵的)行和列

java - 调用自己的方法时,旧字符串值会留下