我可以在python中做这样的事情:
l = ['one', 'two', 'three']
if 'some word' in l:
...
这将检查列表中是否存在“某个单词”。但我可以做反转吗?
l = ['one', 'two', 'three']
if l in 'some one long two phrase three':
...
我必须检查数组中的某些单词是否在字符串中。我可以使用循环执行此操作,但这种方式有更多的代码行。
答案 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