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 学习笔记
Dec 27 Python
探究python中open函数的使用
Mar 01 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
python3 爬取图片的实例代码
Nov 06 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
Django封装交互接口代码
Jul 12 Python
python开发入门——列表生成式
Sep 03 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 Python
python神经网络Xception模型
May 06 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
Linux常见面试题
2013/03/18 面试题
电子商务毕业生求职信
2013/11/10 职场文书
八年级数学教学反思
2014/01/31 职场文书
我的小天地教学反思
2014/04/30 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
新年祝酒词大全
2015/08/11 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript