Python 中判断列表是否为空的方法


Posted in Python onNovember 24, 2019

在判断列表是否为空时,你更喜欢哪种方式?决定因素是什么?

在 Python 中有很多检查列表是否是空的方式,在讨论解决方案前,先说一下不同方法涉及到的不同因素。

我们可以把判断表达式可以分为两个阵营:

  1. 对空列表的显式比较
  2. 对空列表的隐式求值

这意味着什么?

显式比较

我们从显式比较开始说起,无论我们使用列表符号 [] 还是声明空列表的函数 list() ,遵循的策略是查看待检查列表是否与空列表完全相等。

# 都是用来创建空列表
a = []
b = list()
print(a == b) # True

另外,我们可以使用 len() 函数返回列表中的元素个数。

a = []
if len(a) == 0:
  print("The list is empty")

隐式求值

和显式比较相反,隐式求值遵循的策略是:将空列表求值为布尔值的 False ,将有元素填充的列表求值为布尔值的 True 。

a = []
b = [1]
if a:
  print("Evaluated True")
else:
  print("Evaluated False")
if b:
  print("Evaluated True")
else:
  print("Evaluated False")
# 输出
Evaluated False
Evaluated True

那么,显式比较和隐式求值有什么区别呢?

很多人习惯于使用显式比较的方式。但是如果你遵循鸭子类型的设计风格,那么会更加偏向于使用的是隐式方法。

什么是鸭子类型

「鸭子类型」这个此来自以下短语:

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

从功能上讲,这是对对象实际数据类型压力较小的一种确认。在鸭子类型中,关注点在于对象的行为,能作什么(比如,可迭代 iterable);而不是关注对象所属的类型。鸭子类型在动态语言中经常使用,非常灵活。

鸭子类型优先考虑便利性而非安全性,从而可以使用更灵活的代码来适应更广泛的用途,它不会像传统方式那么严格。

我们应该使用哪种方式?

当我们越了解隐式求值,就越倾向于使用这种方式,因为我们知道空列表将被求值为 False 。

a = []
print(bool(a)) # False

这使得我们可以合并那些很长的检查表达式,如:

# 之前
if isinstance(a, list) and len(a) > 0:
  print("Processing list...")
# 之后
if a:
  print("Processing list...")

当然,最终的选择还取决于这个本次检查的意图:

  • 如果你检查空列表是为了对其进行迭代,那么隐式求值是更合适的方法。
  • 如果你检查空列表是为了在之后调用列表中的方法,那么可以考虑使用显式比较来同时验证数据类型。

总结

以上所述是小编给大家介绍的Python 中判断列表是否为空的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
Python中的生成器和yield详细介绍
Jan 09 Python
Python实现发送QQ邮件的封装
Jul 14 Python
利用python求相邻数的方法示例
Aug 18 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python装饰器语法糖
Jan 02 Python
Python删除n行后的其他行方法
Jan 28 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
在django view中给form传入参数的例子
Jul 19 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 #Python
python求质数列表的例子
Nov 24 #Python
解决Python中回文数和质数的问题
Nov 24 #Python
使用python实现回文数的四种方法小结
Nov 24 #Python
python代码打印100-999之间的回文数示例
Nov 24 #Python
Django 自定义分页器的实现代码
Nov 24 #Python
基于python的列表list和集合set操作
Nov 24 #Python
You might like
[转帖]PHP世纪万年历
2006/12/06 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
微信小程序入门教程
2016/11/18 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python 类的继承实例详解
2017/03/25 Python
python中的set实现不重复的排序原理
2018/01/24 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
寄语十八大感言
2014/02/07 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
幼儿园辞职书
2015/02/26 职场文书
《穷人》教学反思
2016/02/19 职场文书
《夸父追日》教学反思
2016/02/20 职场文书