Python 如何检查列表是否为空?
Pythonic 的判空写法是 if not my_list:——利用空列表为 False 的真值特性;len(my_list) == 0 也可用但不够简洁。本文给出推荐写法与 None 的区分。
推荐写法:if not my_list:——空列表的布尔值是 False,这是最 Pythonic 的判空方式,比 len(my_list) == 0 更简洁。
三种写法对比
my_list = []
# ✅ 推荐:真值判断
if not my_list:
print("列表为空")
# 可用但啰嗦
if len(my_list) == 0:
print("列表为空")
# ❌ 不要这样:与空列表字面量比较
if my_list == []:
print("能工作,但不推荐")
注意区分 None
def process(items=None):
if items is None: # 没传参
items = []
if not items: # 空列表(含传入的空列表)
return "无数据"
None 和 [] 都不是 True,但语义不同——函数默认参数场景要分开判断。
对 list 而言检查的是长度,不是元素真值:[False]、[0] 和 [None] 都不是空列表。
同类对象
空字符串 ""、空字典 {}、空集合 set()、0 都是 False——同一套 if not x: 写法通吃。
常见问题(FAQ)
Q:NumPy 数组也能 if not arr 吗? 不应这样判断数组是否为空:多元素数组会抛歧义错误,单元素和空数组行为还与大小及 NumPy 版本有关;用 arr.size == 0。
Q:为什么不推荐 == []? 它创建新列表且表达不如真值判断直接,但不能据此保证所有场景性能更慢(PEP 8 明确推荐真值判断)。