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中处理字符串之isalpha()方法的使用
May 18 Python
Python的装饰器使用详解
Jun 26 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
通过python将大量文件按修改时间分类的方法
Oct 17 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
tensorflow多维张量计算实例
Feb 11 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
python中return如何写
Jun 18 Python
python的链表基础知识点
Sep 13 Python
python turtle绘图命令及案例
Nov 23 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 Python
使用Python获取字典键对应值的方法
Apr 26 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下使用curl模拟用户登陆的代码
2010/09/10 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
php创建多级目录的方法
2015/03/24 PHP
php实现倒计时效果
2015/12/19 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python文件及目录操作实例详解
2015/06/04 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python模拟百度登录实例详解
2016/01/20 Python
python实现二叉查找树实例代码
2018/02/08 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
精选奢华:THE LIST
2019/09/05 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
医学生自我评价
2014/01/27 职场文书
供货协议书
2014/04/22 职场文书
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python