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基础教程之获取本机ip数据包示例
Feb 10 Python
Python中的urllib模块使用详解
Jul 07 Python
Python调用C++程序的方法详解
Jan 24 Python
Python File readlines() 使用方法
Mar 19 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
python读取文件名并改名字的实例
Jan 07 Python
Python 硬币兑换问题
Jul 29 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Python requests.post方法中data与json参数区别详解
Apr 30 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php学习之运算符相关概念
2011/06/09 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
javascript实现密码验证
2015/11/10 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
python中nan与inf转为特定数字方法示例
2017/05/11 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
django使用html模板减少代码代码解析
2017/12/12 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
大学英语专业求职信
2014/06/21 职场文书
家长学校培训材料
2014/08/20 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
使用Django实现商城验证码模块的方法
2021/06/01 Python
Python连续赋值需要注意的一些问题
2021/06/03 Python