检查Python输入是否包含关键字列表
AKA此文件的正确版本:检查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:
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!")