检查Python输入是否包含关键字列表

检查Python输入是否包含关键字列表,python,input,keyword-search,Python,Input,Keyword Search,AKA此文件的正确版本: if ['hi', 'hello', 'greetings'] in userMessage: print('Hello!') 我尝试了上面显示的内容,但它说它不能使用列表,它必须使用单个字符串。如果我将数组设置为对象/变量,也是一样的。如果我使用“或”,它似乎不完全起作用。您可以: found = set(['hi','hello','greetings']) & set(userMessage.split()) for obj in found:

AKA此文件的正确版本:

if ['hi', 'hello', 'greetings'] in userMessage:
    print('Hello!')
我尝试了上面显示的内容,但它说它不能使用列表,它必须使用单个字符串。如果我将数组设置为对象/变量,也是一样的。如果我使用“或”,它似乎不完全起作用。

您可以:

found = set(['hi','hello','greetings']) & set(userMessage.split())
for obj in found:
    print found

如果您也在寻找多个单词

,如果目标只是说明是否有任何已知列表出现在
userMessage
中,而您不在乎它是哪一个,请使用:

当它被击中时会短路,因此如果输入中出现
hi
,它不会检查其余部分,并立即返回
True

如果必须将单词作为单个单词查找(因此
userMessage=“This”
应为false,即使
hi
出现在其中),则使用:

if not {'hi', 'hello', 'greetings'}.isdisjoint(userMessage.split()):

也会短路,但方式不同;它迭代
userMessage.split()
,直到匹配其中一个关键字,然后停止并返回
False
not
翻转到
True
),返回
True
(由
not
翻转到
False
)仅当所有单词都与关键字不匹配时。

您还可以使用Set比较多个元素:

if set(['hi', 'hello', 'greetings']) <= set(userMessage.split()):
   print("Hello!")

如果设置了(['hi'、'hello'、'greetings']),您希望它以另一种方式出现
if userMessage在['hi'、'hello'、'greetings']中:
逻辑地翻译它。如果
消息
出现在某些消息列表中。没有比这更复杂的了。它在英语中也是一样的<代码>如果列表项中的项:
我想OP需要
用户消息中的所有关键字,对吗@GabeWeiner?抱歉,我没有具体说明,我的意思是如果其中一个存在,打印结果
已经是内置Python类型。只需使用
set(lst)
,然后设置一个交集是一个很好的方法。另外,在我给它一个“+1”之前还有一件事,因为这是正确的答案,代码片段的第一行有一个语法错误,因为后面有
@AlexanderHuszagh:您还可以避免将
列表
转换为
(并使用文字,因为为什么创建一个
列表
只是为了立即将其转换为
)和
found={'hi'、'hello'、'greetings'}.intersection(userMessage.split())
;命名方法接受任何iterable,而不仅仅是set和(实现细节)即使在内部也不要将其转换为
,只需对原始
进行迭代和成员资格测试,以确定它是否属于结果
。此测试是否所有单词都在
用户消息
中,而不仅仅是一个;OP。要使其仅适用于一个,您需要之类的内容e> 如果不是{'hi'、'hello'、'greetings'}.isdisjoint(userMessage.split()):
isdisjoint
在没有重叠时返回
True
,因此翻转它(使用
not
)会告诉您至少有一个存在。
if set(['hi', 'hello', 'greetings']) <= set(userMessage.split()):
   print("Hello!")