python程序很慢

Posted

技术标签:

【中文标题】python程序很慢【英文标题】:python program very slow 【发布时间】:2013-06-15 16:54:15 【问题描述】:

该程序生成字母组合并检查它们是否是单词,但是该程序非常慢,每秒只能生成几个单词。请告诉我为什么它很慢,以及我需要什么让它更快

import itertools 

for p1 in itertools.combinations('abcdefghijklmnopqrstuvwxyz', 4):
    with open('/Users/kyle/Documents/english words.txt') as word_file:
        english_words = set(word.strip().lower() for word in word_file)

    def is_english_word(word):
        return word.lower() in english_words

    print ''.join(p1),"is", is_english_word(''.join(p1))

【问题讨论】:

你的单词列表有多大?每个组合你读一次。 单词列表是所有英文单词的列表。 【参考方案1】:

这很慢,因为您要为每个循环迭代重新读取文件,并创建一个新的函数对象。这两件事都不依赖于循环变量。将这些移出循环以仅运行一次

此外,简单的函数可以内联;调用函数相对昂贵。也不要给''.join() 打两次电话。而且你只使用小写字母来生成单词,所以.lower() 是多余的:

with open('/Users/kyle/Documents/english words.txt') as word_file:
    english_words = set(word.strip().lower() for word in word_file)

for p1 in itertools.combinations('abcdefghijklmnopqrstuvwxyz', 4):
    word = ''.join(p1)
    print ' is '.format(word, word in english_words)

由于您正在生成长度为 4 的单词,因此您可以通过仅从英文单词文件中加载长度为 4 的单词来节省一些内存:

with open('/Users/kyle/Documents/english words.txt') as word_file:
    english_words = set(word.strip().lower() for word in word_file if len(word.strip()) == 4)

【讨论】:

感谢您的解决,我会尽快接受您的答复。 谢谢它让它工作得很好,我如何让它只显示true 或者这是错误的地方问,我认为我应该在“编程难题”上提问& Code Golf”网站。 使用if 测试? if word in english: print word 而不是当前的 print 语句?这并不难做到。 @kylek:但是打印出我过滤的english_words 集而不是重新生成所有可能的 4 字母组合会更快。我在答案末尾生成的集合包含 all 4 个字母的单词,它们将永远匹配你的 4 个字母组合循环。 感谢您的帮助,所有问题都已解决,我没有其他问题了。

以上是关于python程序很慢的主要内容,如果未能解决你的问题,请参考以下文章

Python inspect.stack 很慢

编写高质量代码:改善Python程序代码的91个建议

python程序之profile分析

用python编程读取TXT时,数据大概有1千万条,速度很慢如何解决?

如何运行Python程序的方法

什么可能导致 Tkinter/Python 中打开的文件对话框窗口在用户选择文件后关闭速度真的很慢?