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中apply函数的用法实例教程
Jul 31 Python
python获取当前计算机cpu数量的方法
Apr 18 Python
python中查看变量内存地址的方法
May 05 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python实现图片转字符画的代码实例
Feb 22 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
python-numpy-指数分布实例详解
Dec 07 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
通过html表格发电子邮件
2006/10/09 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
React快速入门教程
2017/01/17 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
python删除列表内容
2015/08/04 Python
python多进程共享变量
2016/04/06 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
python实现kMeans算法
2017/12/21 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
如何学习Python time模块
2020/06/03 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
小学教师培训感言
2014/02/11 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
执行力心得体会范文
2016/01/11 职场文书