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中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python安装教程 Pycharm安装详细教程
May 02 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
Python创建或生成列表的操作方法
Jun 19 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
一行python实现树形结构的方法
Aug 09 Python
Python发送邮件的实例代码讲解
Oct 16 Python
Django 自定义分页器的实现代码
Nov 24 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
Python如何将装饰器定义为类
Jul 30 Python
python中mongodb包操作数据库
Apr 19 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
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
对python Tkinter Text的用法详解
2018/10/11 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python3下载抖音视频的完整代码
2019/06/05 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python获取时间戳代码实例
2019/09/24 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python实现邮件循环自动发件功能
2020/09/11 Python
python反扒机制的5种解决方法
2021/02/06 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
.NET remoting的两种通道是什么
2016/05/31 面试题
夜大毕业生自我评价分享
2013/11/10 职场文书
中英文自我评价语句
2013/12/20 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书