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的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
python实现简易内存监控
Jun 21 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python如何调用JS文件中的函数
Aug 16 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
python str字符串转uuid实例
Mar 03 Python
Python内置函数property()如何使用
Sep 01 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之autoload运行机制实例分析
2014/08/28 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
js中this的用法实例分析
2015/01/10 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
javaScript基础详解
2017/01/19 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python面向对象程序设计示例小结
2019/01/30 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
解决python运行效率不高的问题
2020/07/20 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
服装设计行业个人的自我评价
2013/12/20 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
体育运动口号
2014/06/09 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书