2011-11-26 90 views
2

我要檢查,如果一個單詞在單詞列表列表。檢查串詞的匹配文字

word = "with" 
word_list = ["without", "bla", "foo", "bar"] 

我試過if word in set(list),但它沒有產生想要的結果,由於in是匹配字符串,而不是項目。也就是說,"with"是任何在word_list單詞的比賽,但仍然if "with" in set(list)會說True

什麼是做這種檢查不是通過list手動重複一個簡單的方法?

+2

你會想要什麼樣的結果呢? – jsalonen

+4

你真的使用'list'來存儲這個列表,還是僅僅爲了說明?這是一個內建的,所以你應該避免使用會掩蓋它的名字。 –

+1

好點Brian!在任何情況下,它是爲了避免重寫文章 – jsalonen

回答

8

名字你可以這樣做:

found = any(word in item for item in wordlist) 

它會檢查每個詞進行匹配,並返回true,如果任何有匹配

+0

否現在懷疑。這是一個絕妙的解決方案! – jsalonen

+3

如果在第一次匹配後立即返回(短路),則不檢查每個*字。 – jfs

+1

這是真的。對我而言,目前還不清楚他是否在尋找布爾結果或完整的匹配列表。 – jsalonen

3

in正在按預期的精確匹配

>>> word = "with" 
>>> mylist = ["without", "bla", "foo", "bar"] 
>>> word in mylist 
False 
>>> 

您還可以使用:

milist.index(myword) # gives error if your word is not in the list (use in a try/except) 

milist.count(myword) # gives a number > 0 if the word is in the list. 

但是,如果你正在尋找子串,則:

for item in mylist: 
    if word in item:  
     print 'found' 
     break 

順便說一句,不使用list爲可變

0

你也可以通過連接所有的WORD_LIST的話成一個字符串創建一個單一的搜索字符串:

word = "with" 
word_list = ' '.join(["without", "bla", "foo", "bar"]) 

那麼簡單in測試將做的工作:

return word in word_list