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对文件操作知识汇总
May 15 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
Python面向对象类的继承实例详解
Jun 27 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python爬取哈尔滨天气信息
Jul 14 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
详解Python 中的 defaultdict 数据类型
Feb 22 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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的输入输出流
2007/02/14 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
tensorflow的计算图总结
2020/01/12 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Python正则表达式学习小例子
2020/03/03 Python
如何用Python绘制3D柱形图
2020/09/16 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
What is view? why do we have view?
2012/06/22 面试题
六个一活动实施方案
2014/03/21 职场文书
2014年团队工作总结
2014/11/24 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
Go web入门Go pongo2模板引擎
2022/05/20 Golang