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

Python:替换多for循环、多迭代器,python,for-loop,itertools,Python,For Loop,Itertools,我需要你的帮助。如果多个嵌套for循环(超过5个嵌套循环,在代码示例中为5个)都经过相同的范围(比如从1到10),并且在最后一个for循环之后,在底部,我将迭代项的每一个总和都附加到列表中,那么替换多个嵌套for循环的最有效方法是什么。代码看起来像这样: 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循环(超过5个嵌套循环,在代码示例中为5个)都经过相同的范围(比如从1到10),并且在最后一个for循环之后,在底部,我将迭代项的每一个总和都附加到列表中,那么替换多个嵌套for循环的最有效方法是什么。代码看起来像这样:

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在这方面也帮不上什么忙。那么如何帮助呢?

我建议使用递归编程。当函数调用自身以使用不同参数执行相同任务时,就会发生这种情况

定义迭代(b,i,j,k,l,m): 对于范围(1,11)内的i: b、 附加(i+j+k+l+m) 如果(某些任务已完成): 返回b 其他: 某些迭代(b,i,j,k,l,m) 我认为这个函数不会直接工作,我建议对递归编程进行一些研究。这是一个非常有趣的范例,主要用于人工智能

优点:

  • 它的代码效率非常高
缺点:

  • 当堆栈已满时,它将崩溃(这种情况很少发生,大多数情况下是由于错误造成的)
使用

您可能希望生成b生成器,以便对其进行惰性评估

b = (sum(item) for item in product(range(1, 11), repeat=5))

一个更简洁的方法是使用
map
b=map(总和,乘积(范围(1,11),重复=5))
@HarishRajagopal,这是个人喜好的问题,需要进行大量讨论,包括这里的讨论(例如),同时Guido也有明确的说明。非常感谢链接!我觉得讨论很有趣。
b = (sum(item) for item in product(range(1, 11), repeat=5))