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

标签:Python,删除,字符,None,元素
0
投稿

猜你喜欢

  • Python实现常见数据格式转换的方法详解

    2023-04-16 03:48:16
  • 高级消息队列协议AMQP简介

    2022-11-01 09:39:07
  • Python中getattr函数和hasattr函数作用详解

    2022-10-29 15:42:11
  • python数据结构算法分析

    2022-06-11 02:57:15
  • Mysql中日期和时间函数介绍

    2008-05-24 08:16:00
  • 基于python的Tkinter编写登陆注册界面

    2022-12-20 09:44:30
  • gliffy-confluence-plugin-9.1.2插件教程详解

    2022-05-02 06:21:21
  • 一次性压缩Sqlserver2005中所有库日志的存储过程

    2012-01-29 17:58:28
  • Python实现高效求解素数代码实例

    2023-04-29 16:06:32
  • 数学公式“四又二分之一”

    2009-01-14 20:03:00
  • Python warning警告出现的原因及忽略方法

    2021-10-16 10:59:02
  • python实现Simhash算法

    2022-06-29 06:21:05
  • vue axios二次封装的详细解析

    2024-01-18 01:43:44
  • pandas如何处理缺失值

    2021-04-10 12:42:35
  • 利用Python制作简易的核酸检测日历

    2022-02-04 00:55:53
  • python绘制三维图的详细新手教程

    2022-03-19 14:23:52
  • Python流程控制语句详解

    2022-03-01 22:36:37
  • redis查看连接数及php模拟并发创建redis连接的方法

    2023-11-16 11:47:14
  • 定位后无法选择容器内容解决方案

    2008-07-28 13:14:00
  • mysql 时间戳的用法

    2024-01-18 03:11:37
  • asp之家 网络编程 m.aspxhome.com