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中用get()方法获取字典键值的教程
May 21 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python装饰器用法实例总结
Feb 07 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
django静态文件加载的方法
May 20 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
python连接mysql有哪些方法
Jun 24 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
python实现简单的三子棋游戏
Apr 28 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缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
jQuery中:last选择器用法实例
2014/12/30 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
element中的$confirm的使用
2020/04/26 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
Python中zfill()方法的使用教程
2015/05/20 Python
Python多线程爬虫简单示例
2016/03/04 Python
Django视图和URL配置详解
2018/01/31 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
历史学专业推荐信
2013/11/06 职场文书
开会迟到检讨书
2014/01/08 职场文书
销售工作决心书
2015/02/04 职场文书
地道战观后感300字
2015/06/04 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python