Python - 从列表中获得最佳匹配

时间:2013-07-31 15:14:37

标签: python

这可能是一个简单的脚本,但似乎无法在Google上找到列表。我有一个包含单词的列表,然后是一个短语。我想将列表中的单词与短语匹配,然后如果匹配则返回false。我将如何使用Python进行操作?

示例:

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

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

4 个答案:

答案 0 :(得分:8)

由于可能存在大量排列,因此最好颠倒逻辑,并检查短语中的每个单词是否都在列表中。

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

我们可以使用the all() built-in functiongenerator expression轻松实现此目标。

我们将该短语拆分为包含str.split()的字词,然后检查每个字词以查看它是否在words中(变量名list粉碎了内置list()功能,不应该使用)。

另请注意对集合的更改,因为集合上的成员资格测试明显快于列表。由于长短语可能会在此函数中执行许多成员资格测试,因此我们希望该操作尽可能高效。

集合文字只使用花括号而不是方括号 - 如果您有现有列表而不是文字,则可以使用the set() built-in function构建集合。例如:words = set(some_list)

答案 1 :(得分: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()

答案 2 :(得分: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

答案 3 :(得分: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的答案,我觉得这是最好的方法!