1

これはおそらく単純なスクリプトですが、Google でリストを見つけることができないようです。単語とフレーズを含むリストがあります。to list の単語をフレーズに一致させ、一致しない場合は false を返したいと思います。Pythonを使用してどのようにそれを行うのですか?

例:

list = ["hello", "word", "game", "challenge", "play"]
phrase = "play game"

if 'any combination from list' == phrase:
    return True
else:
    return False
4

4 に答える 4

8

可能な順列の数が非常に多いため、論理を逆にして、フレーズ内のすべての単語がリストに含まれているかどうかを確認する方がはるかに優れています。

words = {"hello", "word", "game", "challenge", "play"}
phrase = "play game"
return all(word in words for word in phrase.split())

組み込み関数ジェネレーター式を使用するとall()これを非常に簡単に実現できます。

句を単語に分割し、str.split()各単語が含まれているかどうかを確認しwordsます (変数名listは組み込みlist()関数を破壊するため、使用しないでください)。

セットのメンバーシップ テストはリストよりも大幅に高速であるため、セットの変更にも注意してください。長いフレーズはこの関数で多くのメンバーシップ テストを行う可能性があるため、その操作をできるだけ効率的にしたいと考えています。

セット リテラルは、角かっこの代わりに中かっこを使用するだけです。リテラルではなく既存のリストがある場合はset()組み込み関数を使用してセットを作成できます。例: words = set(some_list).

于 2013-07-31T15:16:33.310 に答える
0

これはうまくいくはずです:

import itertools
list = ["hello", "word", "game", "challenge", "play"]
phrase = "play game"

length  = len(phrase.split(' '))

for perm in itertools.permutations(list, length):
    if ' '.join(perm) == phrase:
        return True
    return False
于 2013-07-31T15:25:32.557 に答える