Python中如何检查一个列表是否为空?

135

我正在使用的 API 可以返回空的 [] 列表。

以下条件语句不像预期一样工作:

if myList is not None: #not working
    pass

if myList is not []: #not working
    pass

什么会起作用?


2
使用!=代替is not也可以使其工作,不过if myList的形式更受推荐。 - Mike Graham
如果有人觉得有用的话,我创建了一个YouTube教程,比较了检查列表是否为空的不同方法。API响应是一个完美的使用案例 https://www.youtube.com/watch?v=8V88bl3tuBQ - Brendan Metcalfe
为什么不直接处理列表呢?就像这样:for item in myList: <对item进行操作> 如果列表为空,那么就会跳过,如果不为空,你就可以按照一开始的计划继续进行操作。 - MrWonderful
if myList == []: print("The list is empty!") - anjandash
尝试使用!=而不是is not,这样它就可以工作了。 - Léo
3个回答

209
if not myList:
  print "Nothing here"

这是PEP8推荐的方式,正如Chris Lacasse在另一条评论中所说的那样。 - johan

23

我喜欢Zarembisty的回答。不过,如果你想更加明确,你总是可以这样做:

if len(my_list) == 0:
    print "my_list is empty"

36
你可以这样做,但它会违反 PEP 8 规范,该规范说:
  • 对于序列(字符串、列表、元组),使用空序列为 False 的特性。是:if not seq: if seq: 不是:if len(seq) if not len(seq)
- Chris Lacasse
谢谢你指出这个问题,Chris Lacasse。我之前不知道pep8。 - inspectorG4dget
这也将是一种普遍的性能悲观:如果你只需要知道它们是否为空,就不要花时间计算可能很长的集合中的元素数量。 - Ad N
1
@AdN: len 是一个 O(1) 操作,所以这不是真正的问题。然而,直接检查 if len(myList) 可能会更快(我不确定)。当然,如果我们采取这种方式,我们也可以做 if myList - inspectorG4dget
2
如果my_list为None,上述代码将会崩溃。 - rkachach
当涉及到Django Rest Framework时,我不得不使用这种方法来检查列表是否为空,但是如果在请求体上定义了它,如果不是,我需要其他错误,使用布尔方法覆盖了“字段未定义错误”。 - Dr Jfrost

20

在布尔上下文中(例如 if some_list:),空列表会被视为假(False)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接