0

このプログラムは、文字の組み合わせのリストを生成し、それらが英語の単語であるかどうかをチェックしますが、プログラムはいくつかの単語を除外しています.辞書ファイルをチェックしたところ、単語はそこにありましたが、まだ出力に含まれていません.なぜプログラムがなどの多くの結果を除外home corn barnします。

import itertools
#http://www.puzzlers.org/pub/wordlists/engwords.txt

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)

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

これは私が使っている辞書ですhttp://www.puzzlers.org/pub/wordlists/engwords.txt

4

1 に答える 1

1

あなたが探しているのはproductデカルト積)であり、combinations(文字がアルファベット順に並んでいない、または文字が重複している単語を生成しません):

import string

for letters in itertools.product(string.ascii_lowercase, repeat=4):
    word = ''.join(letters)

    if word in english_words:
        print word

文字列の代わりにタプルを使用することもできます。これにより、速度が向上します。

import string
from itertools import product
#http://www.puzzlers.org/pub/wordlists/engwords.txt

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

words = english_words.intersection(product(string.ascii_lowercase, repeat=4))
于 2013-06-16T17:28:57.730 に答える