检查字符串是否包含Python中列表中的元素时出错?

时间:2015-08-12 09:33:15

标签: python list any

所以我试图使用any()函数搜索用户输入的字符串,看看它是否包含列表中的任何元素:

# takes the user input
i = raw_input(">>> ")
e = i.lower()
af.inp.append(e)

# greeting section
if any(x in e for x in af.x):
    af.greeting()

列表:

 x = ["hello", "hi", "hey"] # greetings

所以基本上我有一个问题,如果我输入任何包含列表中找到的任何字符的字符串,它将返回问候语功能......

这是一个问题,好像我输入" Shit"而不是"嗨"它将运行问候语功能。我想我可能正在使用错误的函数来搜索用户输入文本中找到的特定整个单词或字符串,而不是单词的一部分:ex。 " S'喜' T"而不是"嗨"。

任何人都知道解决这个问题的方法,或者我可以采用不同的方式搜索整个单词或字符串?

P.S。只是为了澄清我理解为什么这会发生使用任何函数我只是想知道如果有任何方法围绕这个或不同的方法一起。

2 个答案:

答案 0 :(得分:2)

如果您想检查列表x中是否存在您的字词,那么您需要拆分您的输入,然后使用any

i = raw_input(">>> ")
e = i.lower().split()
af.inp.append(e)

# greeting section
if any(x in e for x in af.x):
    af.greeting()

或者您可以简单地将您的文字放在set对象中并使用set.intersection方法:

x = {"hello", "hi", "hey"}
if x.intersections(af.x):
    af.greeting()

答案 1 :(得分:1)

str.split()适用于大多数情况,但如果您输入类似 - 'hey! how are you?'左右的内容,则会失败。我认为你应该在这里使用正则表达式。示例 -

import re
if any(re.search(r'\b{}\b'.format(x),e) for x in af.x):
    af.greeting()

示例/演示 -

>>> import re
>>> e = 'hey! how are you?'
>>> xx = ["hello", "hi", "hey"]
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx):
...     print('Hello to you too!')
...
Hello to you too!
>>> e = 'shit'
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx):
...     print('Hello to you too!')
...
>>>
>>> e = 'hi you'
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx):
...     print('Hello to you too!')
...
Hello to you too!