解决方案:
直接给出解决方案
target_word = ['存在1', '存在2', '不存在3']
any(key_word in text for key_word in target_word)
all(key_word in text for key_word in target_word)
需求:检索字符串是否包含某些关键词
如果我们有这样一个需求,检测字符串中是否包含某一关键词,那么可以简单地写成:
target_file = []
text = '2020-01-07-688158.SH-688158优刻得首次公开发行股票并在科创板上市发行公告'
if '发行公告' in text:
target_file.append(text)
但是,如果我们同时需要对多个关键词筛选,那么代码则变成了:
target_file = []
target_word = ['科创板', '发行公告']
text = '2020-01-07-688158.SH-688158优刻得首次公开发行股票并在科创板上市发行公告'
for key_word in target_word:
if key_word in text:
target_file.append(text)
或者是不用for循环的版本:
target_file = []
text = '2020-01-07-688158.SH-688158优刻得首次公开发行股票并在科创板上市发行公告'
if '科创板' in text and '发行公告' in text:
target_file.append(text)
问题是,当我们的关键词个数稍微增加时,整个代码就会显得十分臃肿,于是我给出了一种非常不直观但是非常好用而且简洁的方法:
target_file = []
target_word = ['科创板', '发行公告', '不包含的关键词']
text = '2020-01-07-688158.SH-688158优刻得首次公开发行股票并在科创板上市发行公告'
if any(key_word in text for key_word in target_word):
target_file.append(col)
基本原理:
稍安勿躁,我知道这一段代码看起来有点“狗屎”。但是其实他的基本原理是由这简单的几个构造构成:
In: boolean_list = [key_word in text for key_word in target_word]
Out: [True, True, False]
In: all(boolean_list)
Out: False
In: any(boolean_list)
Out: True
通过以上这种方式我们就可以在一行代码里面完成对关键词的检索判断啦~
这个小操作可以用在很多地方,下一篇文章会说明如何在dataframe中根据值查找位置!
2021-10-26更新:优化代码性能
由原来的生成列表改为lazy生成器,减少内存占用:
any([key_word in text for key_word in target_word])
all([key_word in text for key_word in target_word])
any(key_word in text for key_word in target_word)
all(key_word in text for key_word in target_word)
“互联网精神”即:开放、平等、协作、快速、分享
对更多内容感兴趣欢迎关注我的个人公众号:梧承 Book House