我可以在python中做这样的事情:
l = ['one', 'two', 'three']
if 'some word' in l:
...
Run Code Online (Sandbox Code Playgroud)
这将检查列表中是否存在"某个单词".但我可以做反向的事情吗?
l = ['one', 'two', 'three']
if l in 'some one long two phrase three':
...
Run Code Online (Sandbox Code Playgroud)
我必须检查数组中的某些单词是否在字符串中.我可以使用循环来做这个,但这种方式有更多的代码行.
ken*_*ytm 268
if any(word in 'some one long two phrase three' for word in list_):
Run Code Online (Sandbox Code Playgroud)
Pau*_*McG 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'])
Run Code Online (Sandbox Code Playgroud)
Dav*_*rby 15
以下是一些替代方法,可能比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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用"\ b"标记与正则表达式进行全字匹配.
这些和Kenny解决方案的性能将取决于几个因素,例如单词列表和短语字符串的长度,以及它们更改的频率.如果性能不是问题,那么选择最简单的,可能是肯尼的.
| 归档时间: |
|
| 查看次数: |
132595 次 |
| 最近记录: |