检查列表是否为空的最快方法是什么?在什么情况下一种方法优于另一种方法?
What is the quickest way to check if a list is empty, and in what scenarios would one method be preferred over the other?
我想知道检查列表是否为空的最佳方法是什么。
我知道这个问题看起来很傻,但我意识到有时候当你和别人一起工作并且别人阅读你的代码时,使用某些函数可能看起来比其他的更好,并且对于来自不同编程语言的人来说更容易理解.
假设我有一个列表:
names = ["Bob", "Billy", "Samuel", "Adam", "Rob"]
这是我检查列表是否为空的一种方法:
is_empty = bool(names)
这是另一个:
is_empty = any(names)
我知道 any 函数会检查列表中是否至少有 1 个真值。
检查列表是否为空的最好和最快的方法是什么?哪个看起来最好,在什么情况下?有没有我不知道的更快的方法?
最简单的方法就是使用列表的隐式布尔方法:
如果 mylist 有内容,if mylist:
将分支为 True,如果 mylist 为空,则分支为 False。从 documentation 开始,一个空列表被认为是 False,因为在布尔计算中调用默认的 __len__()
方法并且它等于零。这是最 pythonic 和最快的评估它的方法,尽管在机制上与 if len(mylist) == 0:
相同。这同样适用于字符串、元组、列表、字典、集合和 range()
.
编辑:关于给定示例之一,如@Carcigenicate 所述,如果目标纯粹是检查列表是否为空,any()
将在 select 情况下失败。 any()
将 return False “如果列表非空且仅包含 Falsey 元素。”
例如,any([False, 0])
将 return False
尽管列表包含两个对象。
我想知道检查列表是否为空的最佳方法是什么。
我知道这个问题看起来很傻,但我意识到有时候当你和别人一起工作并且别人阅读你的代码时,使用某些函数可能看起来比其他的更好,并且对于来自不同编程语言的人来说更容易理解.
假设我有一个列表:
names = ["Bob", "Billy", "Samuel", "Adam", "Rob"]
这是我检查列表是否为空的一种方法:
is_empty = bool(names)
这是另一个:
is_empty = any(names)
我知道 any 函数会检查列表中是否至少有 1 个真值。 检查列表是否为空的最好和最快的方法是什么?哪个看起来最好,在什么情况下?有没有我不知道的更快的方法?
最简单的方法就是使用列表的隐式布尔方法:
如果 mylist 有内容,if mylist:
将分支为 True,如果 mylist 为空,则分支为 False。从 documentation 开始,一个空列表被认为是 False,因为在布尔计算中调用默认的 __len__()
方法并且它等于零。这是最 pythonic 和最快的评估它的方法,尽管在机制上与 if len(mylist) == 0:
相同。这同样适用于字符串、元组、列表、字典、集合和 range()
.
编辑:关于给定示例之一,如@Carcigenicate 所述,如果目标纯粹是检查列表是否为空,any()
将在 select 情况下失败。 any()
将 return False “如果列表非空且仅包含 Falsey 元素。”
例如,any([False, 0])
将 return False
尽管列表包含两个对象。