检查字符串是否包含 Python 列表中的元素时出错?
Error while checking if a string contains an element from a list in Python?
所以我尝试使用 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
所以基本上我遇到了一个问题,如果我输入任何包含列表中找到的任何字符的字符串,它将 return 问候函数...
这是一个问题,好像我输入 "Shit" 而不是 "Hi" 它将 运行 问候功能。我想我可能使用了错误的函数来搜索在用户输入的文本中找到的特定的整个单词或字符串,而不是单词的一部分:例如。 "S'hi't" 而不是 "Hi".
有人知道解决这个问题的方法吗?或者我是否有其他方法可以搜索整个单词或字符串?
p.s。只是为了澄清,我理解为什么使用 any 函数会发生这种情况,我只是想知道是否有任何解决方法或其他方法。
如果你想检查列表 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()
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()
Example/Demo -
>>> 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!
所以我尝试使用 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
所以基本上我遇到了一个问题,如果我输入任何包含列表中找到的任何字符的字符串,它将 return 问候函数...
这是一个问题,好像我输入 "Shit" 而不是 "Hi" 它将 运行 问候功能。我想我可能使用了错误的函数来搜索在用户输入的文本中找到的特定的整个单词或字符串,而不是单词的一部分:例如。 "S'hi't" 而不是 "Hi".
有人知道解决这个问题的方法吗?或者我是否有其他方法可以搜索整个单词或字符串?
p.s。只是为了澄清,我理解为什么使用 any 函数会发生这种情况,我只是想知道是否有任何解决方法或其他方法。
如果你想检查列表 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()
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()
Example/Demo -
>>> 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!