试图找到整个单词,而不只是部分单词Python

时间:2013-11-22 04:29:50

标签: python

在python中,我试图检查一个单词是否与单词列表中包含的另一个单词匹配。目前我正在使用

if word in listOfWords:
    return True

但即使只有部分单词在列表中,这也会返回True。如果我做了AKA:

word = 'apple'
listOfWords = ['applesauce']

if word in listOfWords:
    return True

它将返回True。有什么帮助吗?

5 个答案:

答案 0 :(得分:10)

Official docs for Common sequence operationsx in s的用法描述为 -

  

True如果s的项目等于x,则为False

这是序列的一般情况,但是,如果你再读一点 -

  

虽然innot in操作仅用于一般情况下的简单包含测试,但某些特殊序列(例如strbytes和{{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循环将需要很长时间。