python程序很慢

时间:2013-06-15 16:54:15

标签: python performance itertools words

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

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 个答案:

答案 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)