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 list中append()与extend()用法分享
Mar 24 Python
python中cPickle用法例子分享
Jan 03 Python
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
python实现的简单FTP上传下载文件实例
Jun 30 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
python入门教程之识别验证码
Mar 04 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
15行Python代码实现网易云热门歌单实例教程
Mar 10 Python
Python控制Firefox方法总结
Jun 03 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
python中mongodb包操作数据库
Apr 19 Python
Python PIL按比例裁剪图片
May 11 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
改变隐藏的input中value的值代码
2013/12/30 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
加拿大留学自荐信
2014/01/28 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
综治宣传月活动总结
2014/04/28 职场文书
网络研修心得体会
2016/01/08 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
opencv检测动态物体的实现
2021/07/21 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android