这可能是一个简单的脚本,但似乎无法在Google上找到列表。我有一个包含单词的列表,然后是一个短语。我想将列表中的单词与短语匹配,然后如果匹配则返回false。我将如何使用Python进行操作?
示例:
list = ["hello", "word", "game", "challenge", "play"]
phrase = "play game"
if 'any combination from list' == phrase:
return True
else:
return False
答案 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 function和generator 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的答案,我觉得这是最好的方法!