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中使用Tkinter模块创建GUI程序实例
Jan 14 Python
Python实现Const详解
Jan 27 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
python算法表示概念扫盲教程
Apr 13 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
PyCharm 专业版安装图文教程
Feb 20 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
python中return如何写
Jun 18 Python
python使用shell脚本创建kafka连接器
Apr 29 Python
python缺失值填充方法示例代码
Dec 24 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
js传值 判断
2006/10/26 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
Python中atexit模块的基本使用示例
2015/07/08 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
python 图片去噪的方法示例
2019/07/09 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python3并发写文件与Python对比
2019/11/20 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
文科生自我鉴定
2014/02/15 职场文书
户外活动策划方案
2014/03/12 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js