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 异常处理实例详解
Mar 12 Python
寻找网站后台地址的python脚本
Sep 01 Python
python抓取搜狗微信公众号文章
Apr 01 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
Python 3.8 新功能全解
Jul 25 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python 安装移动复制第三方库操作
Jul 13 Python
Python logging日志库空间不足问题解决
Sep 14 Python
python Scrapy框架原理解析
Jan 04 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
比较完整的微信开发php代码
2016/08/02 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
php中序列化与反序列化详解
2017/02/13 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Python rstrip()方法实例详解
2018/11/11 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
单位办理社保介绍信
2014/01/10 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
治庸问责心得体会
2014/09/12 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
商业门面租房协议书
2014/11/25 职场文书
员工自我评价范文
2015/03/11 职场文书
党支部对转正的意见
2015/06/02 职场文书