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入门篇之条件、循环
Oct 17 Python
日常整理python执行系统命令的常见方法(全)
Oct 22 Python
理解Python垃圾回收机制
Feb 12 Python
python实现发送邮件功能代码
Dec 14 Python
查看Django和flask版本的方法
May 14 Python
python实现对输入的密文加密
Mar 20 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
python语言基本语句用法总结
Jun 11 Python
python同步windows和linux文件
Aug 29 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
Python Pygame实现俄罗斯方块
Feb 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
php 随机排序广告的实现代码
2011/05/09 PHP
php读取csc文件并输出
2015/05/21 PHP
深入php内核之php in array
2015/11/10 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
详解javascript高级定时器
2015/12/31 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
深入理解React高阶组件
2017/09/28 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
vue实现搜索功能
2019/05/28 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python实现上传下载文件功能
2020/11/19 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
2016年端午节寄语
2015/12/04 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
MySQL系列之十二 备份与恢复
2021/07/02 MySQL