Python如何优雅删除字符列表空字符及None元素
这样的一段删除空字符串的代码:
defnot_empty(s): returnsands.strip() print(list(filter(not_empty,['A','','B',None,'C',''])))
代码很简洁,效果嘛,可以丢到Python在线工具|菜鸟教程跑跑看,很nice~但是函数not_empty的返回值有点复杂,可以仔细分析一下:
- -假设字符串a和b作and运算aandb:
- -若两者均为非空,则aandb=b;
- -若两者均非None,且至少一个为空,即'',则aandb=''
- -若至少一个等于None,则aandb=None
由于strip()函数本身是针对str类型进行操作的,所以当s=None时,用单独用一句returns.strip()会报“'NoneType'objecthasnoattribute'strip'”的错误;
不过如果能保证s[]中不包含None成员,函数其实也可以直接写成
defnot_empty(s): returns.strip() print(list(filter(not_empty,['A','','B','C',''])))
因此,returnsands.strip()的作用在于排除s=None的情况,而不是排除s=''或者s=' '的情况。
但是为什么当s=None时,returnsands.strip()不会报错呢?原因是当参与and运算的参数从前至后一旦出现一个不可能使得and为True的情况时,那么and运算就提前终止,又因为python本身是解释性语言,一边运行一边检查,还没有运行到sands.strip()中的s.strip()时就已经运行完成这一句了(虚晃一枪),自然就不会报错了~
最后用lambda表达式可以对上述程序作进一步封装:
defstr_Nempty(s): returnlist(filter(lambdas:sands.strip(),s)) print(str_Nempty(['A','','B','C','']))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。