Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-列表中的最佳匹配_Python - Fatal编程技术网

Python-列表中的最佳匹配

Python-列表中的最佳匹配,python,Python,这可能是一个简单的脚本,但似乎无法在谷歌上找到列表。我有一个包含单词的列表,然后是一个短语。我希望将列表中的单词与短语匹配,如果不匹配,则返回false。我将如何使用Python呢 例如: list = ["hello", "word", "game", "challenge", "play"] phrase = "play game" if 'any combination from list' == phrase: return True else: return Fals

这可能是一个简单的脚本,但似乎无法在谷歌上找到列表。我有一个包含单词的列表,然后是一个短语。我希望将列表中的单词与短语匹配,如果不匹配,则返回false。我将如何使用Python呢

例如:

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

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

由于可能出现的排列数量之多,最好将逻辑颠倒过来,检查短语中的每个单词是否都在列表中

words = {"hello", "word", "game", "challenge", "play"}
phrase = "play game"
return all(word in words for word in phrase.split())
我们可以很容易地实现这一点,使用和

我们用将短语拆分为单词,然后检查每个单词是否在
单词中(变量名
list
破坏了内置的
list()
函数,不应使用)

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


集合文字只使用大括号而不是方括号-如果您有一个现有列表,而不是文字,您可以使用它来构造集合。例如:
words=set(some_list)

由于可能的排列数量太多,最好颠倒逻辑,检查短语中的每个单词是否都在列表中

words = {"hello", "word", "game", "challenge", "play"}
phrase = "play game"
return all(word in words for word in phrase.split())
我们可以很容易地实现这一点,使用和

我们用将短语拆分为单词,然后检查每个单词是否在
单词中(变量名
list
破坏了内置的
list()
函数,不应使用)

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

集合文字只使用大括号而不是方括号-如果您有一个现有列表,而不是文字,您可以使用它来构造集合。例如:
words=set(一些列表)

在尽可能少地修改代码的情况下,这将确保在列表中找到短语中的每个单词

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

在尽可能少地修改代码的情况下,这将确保在列表中找到短语中的每个单词

如果要确保短语中的一个单词在列表中,请将
all()
更改为
any()
,这应该可以:

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
这应该起作用:

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
这也将有助于:

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

这也将起作用:

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

我想他想要的是
any()
而不是
all()
,因为他的代码说
if'any composition from list'==短语:
No,我一开始也这么想,但他指的是“any composition”列表中的所有单词都给出了确切的句子。@Stephan这是逻辑的颠倒-短语必须是列表中单词的任意组合,这意味着短语中的所有单词都必须在列表中(在本例中为集合)。我想他想要的是
any()
而不是
all()
,因为他的代码是
if'any composition from list'==短语:
No,我一开始也这么认为,但他的意思是“any composition”(列表中的单词的任何组合)给出了确切的句子。@Stephan这是逻辑的颠倒-短语必须是列表中单词的任何组合,意思是短语中的所有单词都必须在列表中(本例中为设置)。注意,这是一种非常低效的方法。注意,这是一种非常低效的方法。这是非常低效的,因为列表上的成员资格测试相对昂贵。@Lattyware您的答案也会对集合进行成员资格测试。我想他不想优化,我想他想回答这么小的列表,我无法想象转换到一个集合的性能明显更高。@Wooble可以安全地假设问题中给出的示例可能是一个简单的示例来演示问题。是的,在这种规模下,两种方法在性能上都不会有显著差异,但对于性能可能成为问题的任何潜在情况,都值得提供最佳方法e、 @Stephan集合上的成员资格测试要比列表上的成员资格测试有效得多。优化可能不是目的,但在可能的情况下提供优化是有意义的。这是非常低效的,因为列表上的成员资格测试相对昂贵。@Lattyware你的答案也会对集合进行成员资格测试。我认为他不想要optimization我想他想要一个答案来回答这么小的列表,我无法想象转换成一个集合会有更高的性能。@Wooble可以安全地假设问题中给出的示例可能是一个简单的示例来演示问题。是的,在这个规模下,两种方法的性能都不会有显著差异,但这是值得的为性能可能存在问题的任何潜在情况提供最佳方法。@Stephan在集合上进行成员资格测试比在列表上进行成员资格测试要有效得多。优化可能不是目的,但在可能的情况下提供优化是有意义的。