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中的元类(metaclass)
Feb 14 Python
python实现超简单的视频对象提取功能
Jun 04 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
Python对excel文档的操作方法详解
Dec 10 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
python读取mysql数据绘制条形图
Mar 25 Python
python开根号实例讲解
Aug 30 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
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发电子邮件
2006/10/09 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
js href的用法
2010/05/13 Javascript
jQuery示例收集
2010/11/05 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
解析vue中的$mount
2017/12/21 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
在Python中定义和使用抽象类的方法
2016/06/30 Python
python微信公众号开发简单流程
2018/03/23 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Python如何使用字符打印照片
2020/01/03 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
荷兰本土平价百货:HEMA
2017/10/23 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
2015年招生工作总结
2015/05/04 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers