检查另一个字符串中的单词列表

时间:2010-07-17 12:33:26

标签: python list

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

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

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

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

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

4 个答案:

答案 0 :(得分:246)

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

答案 1 :(得分:19)

如果您的单词列表长度很长,并且您需要多次进行此测试,则可能值得将列表转换为集合并使用集合交集进行测试(具有额外的好处,您将获得实际两个列表中的单词):

>>> 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'])

答案 2 :(得分:14)

以下是一些替代方法,根据具体情况,可能比KennyTM的答案更快或更合适。

1)使用正则表达式:

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)如果你想匹配整个单词,你可以使用集合,例如你不想在短语“他们的理论是理论上的”中找到“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”标记与正则表达式进行全字匹配。

这些和Kenny解决方案的性能将取决于几个因素,例如单词列表和短语字符串的长度,以及它们更改的频率。如果表现不是问题,那么选择最简单的,可能是肯尼的。

答案 3 :(得分:2)

解决此问题的最简单方法是使用 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