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 获取et和excel的版本号
Apr 09 Python
详解Django框架中的视图级缓存
Jul 23 Python
解决python爬虫中有中文的url问题
May 11 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
浅析python内置模块collections
Nov 15 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Python lambda表达式原理及用法解析
Aug 18 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
Python 文本滚动播放器的实现代码
Apr 25 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
python控制台中实现进度条功能
2015/11/10 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
异常和异常类的概念
2014/09/12 面试题
单位消防安全制度
2014/01/12 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
华清池导游词
2015/02/02 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
追讨欠款律师函
2015/05/27 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL