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判断图片宽度和高度后删除图片的方法
May 22 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
详解Python多线程
Nov 14 Python
Python冲顶大会 快来答题!
Jan 17 Python
python skimage 连通性区域检测方法
Jun 21 Python
Python文件读写保存操作的示例代码
Sep 14 Python
pandas 透视表中文字段排序方法
Nov 16 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
Django之全局使用request.user.username的实例详解
May 14 Python
python 通过exifread读取照片信息
Dec 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函数
2011/05/31 PHP
php mail to 配置详解
2014/01/16 PHP
PHP单例模式详细介绍
2015/07/01 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
动态样式类封装JS代码
2009/09/02 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
js实现随机抽奖
2020/03/19 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
python 自动识别并连接串口的实现
2021/01/19 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
介绍一下Ruby的多线程处理
2013/02/01 面试题
团员的自我评价
2013/12/01 职场文书
syb养殖创业计划书
2014/01/09 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
公司司机岗位职责
2014/02/07 职场文书
亲属关系公证书样本
2015/01/23 职场文书
总结会主持词
2015/07/02 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python