检查列表是否为空的最快方法是什么?在什么情况下会优先选择一种方法?

Epi*_*mer 4 python boolean list any

我想知道检查列表是否为空的最佳方法是什么。

我知道这个问题看起来很愚蠢,但我意识到有时当你与其他人一起工作并且其他人阅读你的代码时,使用某些函数可能看起来比其他函数更好,并且对于来自不同编程语言的人来说更容易理解。

假设我有一个清单:

names = ["Bob", "Billy", "Samuel", "Adam", "Rob"]
Run Code Online (Sandbox Code Playgroud)

这是我检查列表是否为空的一种方法:

is_empty = bool(names)
Run Code Online (Sandbox Code Playgroud)

这是另一个:

is_empty = any(names)
Run Code Online (Sandbox Code Playgroud)

我确实意识到 any 函数会检查列表中是否至少有 1 个真值。检查列表是否为空的最佳和最快的方法是什么?哪个看起来最好,在什么场景下?有没有我不知道的更快的方法?

Mon*_*iac 5

最简单的方法是使用列表的隐式布尔方法:
if mylist:如果 mylist 有内容,则分支为 True;如果 mylist 为空,则分支为 False。从文档来看,空列表被认为是 False,因为在布尔计算中__len__()调用默认方法并且它等于零。这是最 Pythonic 和最快的评估方法,尽管在机制上与if len(mylist) == 0:. 这同样适用于字符串、元组、列表、字典、集合和range()

编辑:对于给定的示例之一,正如 @Carcigenicate 所指出的,any()如果目标纯粹是检查列表是否为空,则在某些情况下将失败。“如果列表非空且仅包含 Falsey 元素”,any()将返回False 。
例如,尽管列表包含两个对象,any([False, 0])仍将返回。False