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退火算法在高次方程的应用
Jul 26 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python利用Scrapy框架爬取豆瓣电影示例
Jan 17 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
如何在Python 游戏中模拟引力
Mar 27 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
jupyter notebook的安装与使用详解
May 18 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
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php字符串分割函数用法实例
2015/03/17 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP多进程编程实例详解
2017/07/19 PHP
js一组验证函数
2008/12/20 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Django URL传递参数的方法总结
2016/08/28 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
Python读写压缩文件的方法
2020/07/30 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
《雪儿》教学反思
2014/04/17 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
MySQL分区路径子分区再分区
2022/04/13 MySQL