【问题标题】:Python: Replacing multiple for loops, multiple iteratorsPython:替换多个 for 循环、多个迭代器
【发布时间】: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 在这里也帮不上什么忙。那么如何帮助呢?

【问题讨论】:

    标签: python for-loop 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))
    

    【讨论】:

    【解决方案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)
    

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

    优点:

    • 代码效率很高

    缺点:

    • 当堆栈已满时,它会崩溃(这种情况很少发生,大部分时间是由于错误造成的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2016-08-27
      • 2014-01-13
      • 2019-05-02
      • 2018-12-18
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多