Python:替换多个 for 循环、多个迭代器

问题描述

我需要你的帮助。如果它们都经过相同的范围(假设从 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 在这里也帮不上忙。那么如何才能得到帮助呢?

解决方法

使用itertools.product()

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)

我不认为这个函数会直接工作,我建议在递归编程方面做一些研究。这是一个非常有趣的范式,主要用于人工智能!

优点:

  • 它的代码效率非常高

缺点:

  • 当堆栈已满时,它会崩溃(这种情况很少发生,大多数情况下是由于错误。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...