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中的sort方法使用详解
Jul 25 Python
Python列表生成器的循环技巧分享
Mar 06 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
对pandas replace函数的使用方法小结
May 18 Python
Python实现快速计算词频功能示例
Jun 25 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
10张动图学会python循环与递归问题
Feb 06 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
python 下划线的多种应用场景总结
May 12 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&&mysql)四
2006/10/09 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
js实现列表按字母排序
2020/08/11 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
python删除某个字符
2018/03/19 Python
使用Python来开发微信功能
2018/06/13 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python print不能立即打印的解决方式
2020/02/19 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
Python面向对象实现方法总结
2020/08/12 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
口头翻译求职人自荐信
2013/12/07 职场文书
群众路线调研报告范文
2014/11/03 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
继承公证书格式
2015/01/26 职场文书
观后感开头
2015/06/19 职场文书
师范生见习总结范文
2015/06/23 职场文书
医德医风学习心得体会
2016/01/25 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书