1

这可能是一个简单的脚本,但似乎无法在 Google 上找到列表。我有一个包含单词的列表,然后是一个短语。我想将列表中的单词匹配到短语中,然后如果不匹配则返回 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 回答
2
list = ["hello", "word", "game", "challenge", "play"]
phrase = "play game"

if all((term in list) for term in phrase.split()):
    return True
else:
    return False

尽可能少地更改您的代码,这应该确保您的短语中的每个单词都可以在列表中找到。

如果您想确保您的短语中的一个单词在列表中,请更改all()any()

于 2013-07-31T15:22:39.520 回答
0

这也将起作用:

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

p = phrase.split(" ");

for i in p:

    if not i in words:

        return False

return True

这是一种非常简单的方法。虽然它涉及更多的代码行。您可以参考@Lattyware 的答案,我觉得这是最好的方法!

于 2013-07-31T15:40:08.380 回答
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 回答