如何一行代码检索是否包含list中的一个或全部目标关键词?

解决方案:

直接给出解决方案

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值