在python中,我试图检查一个单词是否与单词列表中包含的另一个单词匹配。目前我正在使用
if word in listOfWords:
return True
但即使只有部分单词在列表中,这也会返回True。如果我做了AKA:
word = 'apple'
listOfWords = ['applesauce']
if word in listOfWords:
return True
它将返回True。有什么帮助吗?
答案 0 :(得分:10)
Official docs for Common sequence operations将x in s
的用法描述为 -
True
如果s的项目等于x,则为False
这是序列的一般情况,但是,如果你再读一点 -
虽然
in
和not in
操作仅用于一般情况下的简单包含测试,但某些特殊序列(例如str
,bytes
和{{1也可以将它们用于子序列测试
所以bytearray
会返回'apple' in 'applesauce'
,因为True
的类型为'applesauce'
,而str
是其后续的。
但是,'apple'
的类型为['applesauce']
,list
的包含测试仅检查确切的项匹配,因此,list
会返回'apple' in ['applesauce']
,因为它比较False
与每个'apple'
元素的相等性。由于list
不等于'apple'
,并且它是列表中唯一的元素,因此会返回'applesauce'
。
所以,你应该做
False
如果要概括它,可以在函数中使用
>>> word = 'apple'
>>> listOfWords = ['applesauce']
>>> word in listOfWords[0] # basically means 'apple' in 'applesauce'
True
答案 1 :(得分:4)
需要更多处理能力,但可以使用正则表达式:
import re
def wordInList(word, listOfWords):
r = re.compile(r'\b' + word + r'\b')
return any(r.search(s) for s in listOfWords)
# Following is True.
wordInList('apple', ['an apple', 'other', 'words'])
# Following is False.
wordInList('apple', ['some applesauce', 'other', 'words'])
如果搜索是在单个字符串而不是列表中,那么它只是:
import re
def wordInString(word, string_value):
return True if re.search(r'\b' + word + r'\b', string_value) else False
答案 2 :(得分:0)
为此,您应该使用带有单词边界的正则表达式。
import re
def findWholeWord(w):
return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search
findWholeWord('apple')('apple sauce') # -> matching object
findWholeWord('apple')('applesauce') # -> null
您可以循环调用该方法的列表。
答案 3 :(得分:0)
回答这个问题,为什么会返回True
你去吧。
>>> word = 'apple'
>>> listOfWords = ['applesauce']
>>> word in listOfWords
False
但如果你这样做
>>> word = 'apple'
>>> listOfWords = ['applesauce']
>>> word in listOfWords[0]
True
在后一种情况下,listOfWords [0]'虽然列表中的项目会显示给运营商'作为一个字符串
型(listOfWords [0])
<class 'str'>
而不是列表中的项目 您需要做的就是转换回一个带有&#39; []&#39;的列表。围绕listOfWords [0] 即。 [listOfWords [0]]
>>> type([listOfWords[0]])
<class 'list'>
所以当你这样做的时候
>>> word in [listOfWords[0]]
False
返回False
,返回False: -
答案 4 :(得分:0)
我认为你可以只添加一行来检查你在if语句中搜索的单词的长度并完成。
word = 'apple'
listOfWords = ['applesauce','apple']
for item in listOfWords:
if (word in item) and (len(item) == len(word)):
print(True,item)
它将返回true,然后返回您要搜索的单词。
True apple
希望它有所帮助。它很容易,它适合你想要的东西。 唯一不好的部分是,如果你有一个大的列表,由于for循环将需要很长时间。