Python如何优雅删除字符列表空字符及None元素
作者:贝_塔 发布时间:2023-10-26 19:17:00
这样的一段删除空字符串的代码:
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', ' ']))
来源:https://www.cnblogs.com/beta-1999/p/13176142.html


猜你喜欢
- 在CentOS上安装MySQL数据库服务器后,系统出于安全性考虑,缺省不支持用户通过非本机连接上数据库服务器,如果想让用户通过另外一台机器连
- 引言你在写代码的过程中,有没有遇到过以下问题?已经写好的程序,想看看程序执行的进度?在写代码批量处理文件的时候,如何显示现在处理到第几个文件
- php+lottery.js制作九宫格抽奖实例,本抽奖功能效果表现好,定制方便简单,新手学习跟直接拿来用都非常不错,兼容IE、火狐、谷歌等浏
- 一、PDF转为MP3 我们平常看到很多文件都是PDF格式,网上的各类书籍多为此格式。有时候不方便阅读,或者怕费眼睛伤颈椎,那么有没
- MySQL5.7版本开始支持JSON格式,在创建表时,可以指定列表的数据类型为JSON,但是如何在JSON格式上创建索引呢??本人做了一个简
- 当你碰到下面的asp错误提示时,说明你asp运行脚本超时了! Active Serv
- 适用环境: PHP5.2.x / mysql 5.0.xclass Mysql { priva
- 有时候我们可能需要import另一个路径下的python文件,例如下面这个目录结构,我们想要在_train.py里import在networ
- 1. Redo日志的介绍Redo日志是物理日志,记录的是页面的变化。1.1 Redo日志的作用提升数据库写入效率保证数据库不丢数据,进行数据
- 本文实例讲述了Python使用ConfigParser模块操作配置文件的方法。分享给大家供大家参考,具体如下:一、简介用于生成和修改常见配置
- 建立一个查询,执行下面的语句生成函数fn_GetPy --生成拼音首码 CREATE function fn_GetPy(@str nvar
- 输入:$a $b $c $d $e0 1 2 3
- demo: <div v-for="item in temps" :key="
- 前言:最近某个时间开始,特别留意了一下Web标准中柱状图,也就是英文中的bar graph的实现。虽然实现方法各异,效果不尽相同,但是总体来
- 0.引言利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用Ope
- 德州扑克简要介绍什么是德州扑克德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold&a
- 前言为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。
- 本文结合其他博主的一些介绍总结了dot函数运算过程基本简介dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、
- 下面把代码写出来,希望大家批评指正. 首先domain对象.在这里使用的注解的方式,都是比较新的版本. User.java package
- 可怜我的C盘本来只有8.XG,所以不得不卸载掉它。卸载掉本身没啥问题,只是昨晚突然发现 Sql Server 2008 R2 Managem