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递归删除指定目录及其所有内容的方法
Jan 13 Python
pycharm显示远程图片的实现
Nov 04 Python
python实现logistic分类算法代码
Feb 28 Python
Python脚本去除文件的只读性操作
Mar 05 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
Python中Qslider控件实操详解
Feb 20 Python
python 如何读、写、解析CSV文件
Mar 03 Python
python和opencv构建运动检测器的实现
Mar 03 Python
python 模拟在天空中放风筝的示例代码
Apr 21 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 Python
python如何查找列表中元素的位置
May 30 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实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
phpStorm2020 注册码
2020/09/17 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
flask中过滤器的使用详解
2018/08/01 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python自省及反射原理实例详解
2020/07/06 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
什么是属性访问器
2015/10/26 面试题
往来会计岗位职责
2013/12/19 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
双拥工作宣传标语
2014/06/26 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
学术研讨会主持词
2015/07/04 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python