2011-11-26 59 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