问题描述
我需要你的帮助。如果它们都经过相同的范围(假设从 1 到 10)并且在最后一个 for 循环之后,那么替换多个嵌套 for 循环(超过 5 个嵌套循环相互 - 在代码示例中为 5 个)的最有效方法是什么,在底部,我将迭代项的每个总和附加到列表中。代码看起来像这样:
b=[]
for i in range(1,11):
for j in range(1,11):
for k in range(1,11):
for l in range(1,11):
for m in range(1,11):
b.append(i+j+k+l+m)
这显然不是内存友好的,需要一些时间。据我所知,itertools 在这里也帮不上忙。那么如何才能得到帮助呢?
解决方法
from itertools import product
b = [sum(item) for item in product(range(1,11),repeat=5)]
你可能想制作 b 生成器,以便它被懒惰地评估
b = (sum(item) for item in product(range(1,repeat=5))
,
我推荐使用递归编程。当函数调用自身以使用不同的参数执行相同的任务时,就会发生这种情况。
def someIteration(b,i,j,k,l,m):
for i in range(1,11):
b.append(i+j+k+l+m)
if (Certain task done):
return b
else:
someIteration(b,m)
我不认为这个函数会直接工作,我建议在递归编程方面做一些研究。这是一个非常有趣的范式,主要用于人工智能!
优点:
- 它的代码效率非常高
缺点:
- 当堆栈已满时,它会崩溃(这种情况很少发生,大多数情况下是由于错误。)