Python:替换多个 for 循环、多个迭代器
Posted
技术标签:
【中文标题】Python:替换多个 for 循环、多个迭代器【英文标题】:Python: Replacing multiple for loops, multiple iterators 【发布时间】:2021-03-23 08:41:41 【问题描述】:我需要你的帮助。如果它们都经过相同的范围(比如说从 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 在这里也帮不上什么忙。那么如何帮助呢?
【问题讨论】:
【参考方案1】:使用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, 11), repeat=5))
【讨论】:
更简洁的方法是使用map
: b = map(sum, product(range(1, 11), repeat=5))
@HarishRajagopal,这是个人喜好问题,需要进行大量讨论,包括在 SO 上(例如 ***.com/q/2979290/4046632),同时 Guido 显然有 stated his preference for list comprehension 。跨度>
非常感谢您的链接!我发现讨论非常有趣。【参考方案2】:
我建议使用递归编程。当一个函数调用自己以不同的参数执行相同的任务时,就会发生这种情况。
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, i, j, k, l, m)
我不认为这个函数会直接起作用,我建议在递归编程方面做一些研究。这是一个非常有趣的范例,主要用于人工智能!
优点:
代码效率很高缺点:
当堆栈已满时,它会崩溃(这种情况很少发生,大部分时间是由于错误造成的。)【讨论】:
以上是关于Python:替换多个 for 循环、多个迭代器的主要内容,如果未能解决你的问题,请参考以下文章