检查另一个string中的单词列表

我可以在python中做这样的事情:

l = ['one', 'two', 'three'] if 'some word' in l: ... 

这将检查列表中是否存在“某个单词”。 但是我可以做相反的事吗?

 l = ['one', 'two', 'three'] if l in 'some one long two phrase three': ... 

我必须检查数组中的某些单词是否在string中。 我可以使用循环,但这种方式有更多的代码行。

 if any(word in 'some one long two phrase three' for word in list_): 

如果你的单词列表是相当长的,而且你需要做很多次这样的testing,可能值得把这个列表转换成一个集合,并使用集合交集来testing(附加的好处是你会得到实际的单词是在这两个列表中):

 >>> long_word_list = 'some one long two phrase three about above along after against' >>> long_word_set = set(long_word_list.split()) >>> set('word along river'.split()) & long_word_set set(['along']) 

这里有几种可供select的方式,这可能比KennyTM的答案更快或更合适,这取决于上下文。

1)使用正则expression式:

 import re words_re = re.compile("|".join(list_of_words)) if words_re.search('some one long two phrase three'): # do logic you want to perform 

2)如果你想匹配整个单词,你可以使用集合,例如,你不想在“他们的定理是理论性的”这个短语中find“the”这个单词:

 word_set = set(list_of_words) phrase_set = set('some one long two phrase three'.split()) if word_set.intersection(phrase_set): # do stuff 

当然,你也可以使用“\ b”标记和正则expression式完成整个单词的匹配。

这些和肯尼的解决scheme的performance将取决于几个因素,如单词列表和短语string是多久,以及他们多久更换一次。 如果performance不是问题,那么最简单的,可能是肯尼的。

解决这个问题最简单最简单的方法就是使用re

 import re search_list = ['one', 'two', 'there'] long_string = 'some one long two phrase three' if re.compile('|'.join(search_list),re.IGNORECASE).search(long_string): #re.IGNORECASE is used to ignore case # Do Something if word is present else: # Do Something else if word is not present