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中unittest用法实例
Sep 25 Python
详解Python中DOM方法的动态性
Apr 11 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
python类的实例化问题解决
Aug 31 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
记一次django内存异常排查及解决方法
Aug 07 Python
Python tkinter实现日期选择器
Feb 22 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
将PHP作为Shell脚本语言使用
2006/10/09 PHP
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
vuejs指令详解
2017/02/07 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
Python单链表简单实现代码
2016/04/27 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
python实现词法分析器
2019/01/31 Python
Python socket 套接字实现通信详解
2019/08/27 Python
Django框架模板用法入门教程
2019/11/04 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
快速创建python 虚拟环境
2020/11/28 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
学校出纳员岗位职责
2014/03/18 职场文书
个人借款担保书
2014/04/02 职场文书
小学教师师德整改措施
2014/09/29 职场文书
公司总经理岗位职责
2015/04/01 职场文书
中学生运动会广播稿
2015/08/19 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python