python列表去除none_Python如何优雅删除字符列表空字符及
None元素
这样的⼀段删除空字符串的代码:
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博客。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。