如何让 Python 中的 for 循环更高效

Posted

技术标签:

【中文标题】如何让 Python 中的 for 循环更高效【英文标题】:How to make the for loop more efficient in Python 【发布时间】:2018-04-20 14:22:01 【问题描述】:

我有一个 Python 代码,可以生成给定句子中单词的所有可能排列。我希望将这些排列写在 .txt 文档中。 如果我尝试使用 9 字长的句子的代码,一切正常。这需要一段时间,但会创建包含所有可能排列的文件。但是当我用一个 10 字长的句子尝试代码时,它需要很长时间,因为可能的排列是 10!。有没有更有效的方法将句子的所有排列保存在 txt 文件中?我认为主要问题是我的 for 循环。

parser = optparse.OptionParser(usage=help_text)
parser.add_option("-f", "--file", dest="filename",
                  help="write the permutations to FILE", metavar="FILE")
(options, args) = parser.parse_args()

# read the input
sentence = input("Sentence: ")
sent_list = re.split(r"[\s.,!?:\"\';()]+", sentence)
# remove empty strings from the sent_list
sent_list = [s for s in sent_list if s is not ""]

result = ""
perm_iterator = itertools.permutations(list(sent_list),r=None)


for item in perm_iterator:
    print("item in perm_iterator",item)
    result += "".join(item);



# print to file if file option is not None
if options.filename is not None:
    with open(options.filename, 'w') as f:
        f.write(result)
    print("The different variants of the sentence got saved in  .".format(options.filename))
else:
    print(result)

【问题讨论】:

为什么不保留perm_iterator作为生成器,在其上调用for循环,逐行写入.txt文件? 老实说,我并不真正了解生成器,但我会寻找并尝试它。谢谢! 【参考方案1】:

答案是。这种操作的时间复杂度总是 N! 的数量级,因为有很多可能的排列。渐近地减少这个在数学上是不可能的。

【讨论】:

以上是关于如何让 Python 中的 for 循环更高效的主要内容,如果未能解决你的问题,请参考以下文章

python:让源码更安全之将py编译成so

python的for如何获得当前循环次数

c++中for循环和switch语句哪个更高效

如何让python等待“无”,首先运行事件循环

3种方案 | 抛弃for循环,让Python代码更丝滑

使用非常规的 for 循环更高效的 Asm? [复制]