这个程序生成字母组合并检查它们是否是单词,但程序非常慢,每秒只生成几个单词。请告诉我为什么它非常慢,我需要让它更快
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))
答案 0 :(得分:13)
这很慢,因为您正在为每个循环迭代重新读取文件 ,并创建一个新的函数对象。这两件事都不依赖于循环变量;将这些移出循环只运行一次。
此外,简单的功能可以内联;调用函数是相对昂贵的。也不要两次致电''.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)