【问题标题】:How to Condense Nested Loops in Python如何在 Python 中压缩嵌套循环
【发布时间】:2019-04-21 10:52:06
【问题描述】:

我有一个包含不同单词列表的二维列表。我有一组 12 个嵌套的 for 循环。我需要遍历 2D 列表中所有可能的元素组合,并对结果进行简单计算。

我最初使用 itertools.product() 函数执行此操作,然后对每个结果列表执行计算,但是 itertools.product() 调用的结果变得太大,我会用完内存。这意味着我需要在每次迭代后执行计算。

我的代码如下所示:

for word1 in possible_words[0]:
    for word2 in possible_words[1]:
            for word3 in possible_words[2]:
                    for word4 in possible_words[3]:
                            for word5 in possible_words[4]:
                                    for word6 in possible_words[5]:
                                            for word7 in possible_words[6]:
                                                    for word8 in possible_words[7]:
                                                            for word9 in possible_words[8]:
                                                                    for word10 in possible_words[9]:
                                                                            for word11 in possible_words[10]:
                                                                                    for word12 in possible_words[11]:
                                                                                        result = ' '.join([word1, word2, word3, word4, word5, word6, word7, word8, word9, word10, word11, word12])                                                                                            
                                                                                        if get_address(result) == desired_address:
                                                                                            return result

这段代码运行良好,可以满足我的需要。但是,我想知道是否有一种方法可以以更 Python 的方式将其浓缩?

【问题讨论】:

  • 我很确定 itertools.product 返回一个迭代器并且不会创建整个结果列表,所以应该没问题。

标签: python python-3.x loops for-loop nested


【解决方案1】:

使用itertools.product,只遍历迭代器,不要用它构建列表:

from itertools import product

for words in product(*possible_words):
    result = " ".join(words)
    if result == desired_string:
        return result

【讨论】:

  • @grizzasd,问题是您正在使用迭代器并构建列表,如果您直接使用迭代器,则不会产生额外的内存开销。
  • 对不起 - 刚刚意识到我的错误。你说的对。我刚刚试了一下,效果很好
  • @grizzasd,很高兴为您提供帮助。您可以考虑阅读以下内容:stackoverflow.com/help/someone-answers。快乐编码!
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多