Python如何优雅删除字符列表空字符及None元素


Posted in Python onJune 25, 2020

这样的一段删除空字符串的代码:

def not_empty(s):
  return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B', None,'C', ' '])))

  代码很简洁,效果嘛,可以丢到 Python在线工具|菜鸟教程 跑跑看,很 nice ~ 但是函数 not_empty 的返回值有点复杂,可以仔细分析一下:

  • - 假设字符串a和b作and运算 a and b:
  • - 若两者均为非空,则 a and b = b;
  • - 若两者均非None,且至少一个为空,即 '',则 a and b = ''
  • - 若至少一个等于None,则 a and b = None

  由于 strip() 函数本身是针对 str 类型进行操作的,所以当 s = None 时,用单独用一句 return s.strip() 会报 “ 'NoneType' object has no attribute 'strip'” 的错误;

  不过如果能保证 s[] 中不包含 None 成员,函数其实也可以直接写成

def not_empty(s):
  return s.strip()
print(list(filter(not_empty, ['A', '', 'B', 'C', ' '])))

  因此, return s and s.strip() 的作用在于排除 s = None 的情况,而不是排除 s = '' 或者 s = '  ' 的情况。

  但是为什么当 s = None 时,return s and s.strip()不会报错呢? 原因是当参与 and 运算的参数从前至后一旦出现一个不可能使得 and 为 True 的情况时,那么 and 运算就提前终止,又因为python本身是解释性语言,一边运行一边检查,还没有运行到 s and s.strip() 中的 s.strip() 时就已经运行完成这一句了(虚晃一枪),自然就不会报错了~

  最后用 lambda 表达式可以对上述程序作进一步封装:

def str_Nempty(s):
	return list(filter(lambda s: s and s.strip(),s))
print(str_Nempty(['A', '', 'B', 'C', ' ']))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
进一步探究Python的装饰器的运用
May 05 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
执行Python程序时模块报错问题
Mar 26 Python
python 读取二进制 显示图片案例
Apr 24 Python
python实现坦克大战
Apr 24 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
浅析Python面向对象编程
Jul 10 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 Python
使用pytorch实现论文中的unet网络
Jun 24 #Python
python连接mysql有哪些方法
Jun 24 #Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 #Python
Python Tornado核心及相关原理详解
Jun 24 #Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 #Python
pytorch SENet实现案例
Jun 24 #Python
利用PyTorch实现VGG16教程
Jun 24 #Python
You might like
拼音码表的生成
2006/10/09 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
jquery动态添加option示例
2013/12/30 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python中type的构造函数参数含义说明
2015/06/21 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
人力资源部培训专员岗位职责
2014/01/02 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
前处理班长职位说明书
2014/03/01 职场文书
士力架广告词
2014/03/20 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL