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程序中实现分布式进程的教程
Apr 28 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
python之生成多层json结构的实现
Feb 27 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
教你用python控制安卓手机
May 13 Python
python 镜像环境搭建总结
Sep 23 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/12/29 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
python测试驱动开发实例
2014/10/08 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
使用Python实现简单的服务器功能
2017/08/25 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python numpy存取文件的方式
2020/04/01 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
本科毕业生应聘求职信
2014/07/06 职场文书
产品质量保证书范本
2015/02/27 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
Java spring定时任务详解
2021/10/05 Java/Android