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程序很慢的主要内容,如果未能解决你的问题,请参考以下文章