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之集合(set)
Sep 24 Python
Python OS模块常用函数说明
May 23 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Python IDLE清空窗口的实例
Jun 25 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
Python实用库 PrettyTable 学习笔记
Aug 06 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 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 破解防盗链图片函数
2008/12/09 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
PHP输出日历表代码实例
2015/03/27 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
深入浅出分析Python装饰器用法
2017/07/28 Python
Python中一行和多行import模块问题
2018/04/01 Python
python字符串常用方法
2018/06/14 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python中的延迟绑定原理详解
2019/10/11 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
前台领班岗位职责
2013/12/04 职场文书
商务邀请函范文
2014/01/14 职场文书
旷课检讨书大全
2014/01/21 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
班级年度安全计划书
2014/05/01 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
违章停车检讨书
2014/10/21 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2015年医生个人工作总结
2015/04/25 职场文书