我的问题与这里的问题非常相似: 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/