2013-11-22 131 views
2

在python中,我試圖檢查一個單詞是否與包含在單詞列表中的另一個單詞匹配。目前我正在使用試圖找到整個單詞,而不僅僅是部分單詞Python

if word in listOfWords: 
    return True 

但是即使列表中只有部分單詞出現,也會返回True。 AKA如果我這樣做:

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

if word in listOfWords: 
    return True 

它會返回True。任何幫助?

+5

不,它止跌」 t – happydave

+0

蘋果一詞在蘋果醬中,因此我很確定它會返回True, ouldn't。 – bob

+0

但蘋果這個詞不在列表中,所以它不會 – happydave

回答

7

你去那裏。

>>> word = 'apple' 
>>> listOfWords = ['applesauce'] 
>>> word in listOfWords 
False 

但是,如果你的整個字& 部分的人做

in操作檢查。你必須做後者才能獲得真正的部分匹配。

2

它需要更多的處理能力,但正則表達式可用於:

import re 

def wordInList(word, listOfWords): 
    for i in listOfWords: 
     if re.match(r'\b' + word + r'\b', i): 
      return True 
    return False 

# 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.match(r'\b' + word + r'\b', string_value) else False 
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 

您可以遍歷您的列表調用該方法。

0

回答這個問題,爲什麼返回真

你走了。 >>> word = 'apple' >>> listOfWords = ['applesauce'] >>> word in listOfWords False

但是,如果你 >>> word = 'apple' >>> listOfWords = ['applesauce'] >>> word in listOfWords[0] True

在後一種情況下, 'listOfWords [0]' 雖然在列表中的項目被提交給' in operator'as a string

型(listOfWords [0]) <class 'str'>

而不是在列表 一個項目所有你需要做的是在轉換回列表與 '[]'圍繞listOfWords [0] 即。[listOfWords [0]

>>> type([listOfWords[0]]) <class 'list'>

所以,當你做 >>> word in [listOfWords[0]] False

返回false

,返回False: -

相關問題