1

与えられた単語のアナグラムを作成するための可能な単語のリストがあります。リストの各文字列は辞書の鍵であり、1つ以上の単語の値を持っています。これは、辞書内の対応するキーの各リストにある単語からキーの順序ですべての可能な文を作成するための最良の(最速の、pythonic)方法です。リストには可変数のキーが含まれています。

keylist = ['key1', 'key2', 'key3']
worddict = {'key1': ['a','b','c'], 'key2':['d','e','f'], 'key3':['g','h','i']}

期待される結果(最初のキーリストの最初の単語、2番目のキーリストの2番目など):

["a d g",
"a d h",
"a d i",
.....
"c f i"]
4

3 に答える 3

6

itertoolsproductモジュールの関数を使用して、反復可能オブジェクトのすべての組み合わせを生成します

import itertools

for sentence in itertools.product(['a','b','c'], ['d','e','f'], ['g','h','i']):
    print sentence

出力はタプルになりますが、必要に応じてこれらを文字列またはリストに簡単に変換できます。

于 2010-08-19T21:38:47.760 に答える
1

このようなものは機能しますか?

import itertools
anagrams = []
for x in itertools.product(*worddict.values()):
    anagrams.extend(" ".join(y) for y in itertools.permutations(x))
于 2010-08-19T21:37:46.590 に答える
0

製品を使ってサルに励まされ、次のようなリストの辞書から可変数のキーを適応させるためにそれらを曲げることができました。

import itertools
keylist = ['key1', 'key4','key2']
worddict = {'key1': ['a','b','c'],
            'key2':['d','e','f'],
            'key3':['g','h','i'],
            'key4':['j','k','l']}
sentences = (' '.join(sentence)
             for sentence in itertools.product(*(worddict[k]
                                                 for k in keylist)))
print '\n'.join(sentences)
于 2010-08-19T22:35:42.733 に答える