我的问题与此处的问题非常类似: 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()
由于
答案 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)))