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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
python抓取网页中图片并保存到本地
Dec 01 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
Python实现的多进程和多线程功能示例
May 29 Python
python实现Windows电脑定时关机
Jun 20 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
Pytorch之finetune使用详解
Jan 18 Python
Python爬取365好书中小说代码实例
Feb 28 Python
快速一键生成Python爬虫请求头
Mar 04 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Python中url标签使用知识点总结
2020/01/16 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
2015学校图书管理员工作总结
2015/05/11 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
家长通知书家长意见
2015/06/03 职场文书
最美乡村教师观后感
2015/06/11 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL