python - 检查列表是否为空的最快方法是什么,在什么情况下一种方法优于另一种方法?
问题描述
我想知道检查列表是否为空的最佳方法是什么。
我知道这个问题看起来很傻,但我意识到有时当你与他人一起工作并且其他人阅读你的代码时,使用某些函数可能看起来比其他函数更好,并且对于来自不同编程语言的人来说更容易理解。
假设我有一个清单:
names = ["Bob", "Billy", "Samuel", "Adam", "Rob"]
这是我可以检查列表是否为空的一种方法:
is_empty = bool(names)
这是另一个:
is_empty = any(names)
我确实意识到 any 函数会检查列表中是否至少有 1 个真值。检查列表是否为空的最好和最快的方法是什么?哪个看起来最好,在哪些情况下?有没有我不知道的更快的方法?
解决方案
使用列表的隐式布尔方法是最简单的:
if mylist:
如果 mylist 有内容,则分支 True,如果 mylist 为空,则分支 False。从文档中,空列表被认为是 False,因为在布尔评估__len__()
中调用默认方法并且它等于零。这是评估它的最 Pythonic 和最快的方法,尽管在机制上与if len(mylist) == 0:
. 这同样适用于字符串、元组、列表、字典、集合和range()
.
编辑:关于给定示例之一,如@Carcigenicate 所述,any()
如果目标纯粹是检查列表是否为空,则在选择情况下将失败。any()
将返回False “如果列表非空且仅包含 Falsey 元素。”
例如,尽管列表包含两个对象,但any([False, 0])
仍会返回。False
推荐阅读
- python - 来自多年时间序列python的每小时热图
- html - 如何为通过 confluence rest API 上传的附件生成缩略图
- android - 如何从 com.google.android.material.textfield.TextInputLayout 中删除背景错误红色
- javascript - require() 在哪里搜索节点 js 中的 index.js?
- javascript - 如何将聊天机器人 webhook 与基于 Web 的聊天窗口集成?
- sqlite - Sqlite SELECT * 过去 30 天
- sql - WHERE 子句中的 SYBASE ASE 字符串替换
- python - 如何将默认值设置为 django 中的参数获取函数,其中参数是字段之一的值?
- python-3.x - Python set update() 是否替换现有项目?
- python - 如何解决 kivy 小部件错误“.kv 只允许一个根对象”