为什么Python中的空列表会被判定为布尔值False?
Python列表的真值判定规则说明
你提到的“所有对象都会被判定为布尔值True”的规则并不适用于Python,Python有一套独立的真值检测逻辑,会明确将一部分内置对象判定为False。
Python内置假值列表
以下类型的对象在做布尔判断时会返回False:
- 数值类零值:
0、0.0、0j - 空序列/空集合:
[](空列表)、()(空元组)、''(空字符串)、{}(空字典)、set()(空集合)、range(0) - 布尔值
False - 特殊空对象
None
除了上述明确标注的假值外,其余绝大多数内置对象都会被判定为True。
对应示例解释
1. while循环迭代列表的逻辑
你给出的示例代码:
unconfirmed_users = ['alice', 'brian', 'candace'] while unconfirmed_users: current_user = unconfirmed_users.pop() print("Verifying user: " + current_user.title()) confirmed_users.append(current_user)
输出结果:
Verifying user: Candace Verifying user: Brian Verifying user: Alice
这个循环的判断逻辑是每次对unconfirmed_users做真值检测:初始列表非空,判定为True进入循环;每次调用pop()会移除列表末尾的元素,直到列表被清空为[],此时真值检测返回False,循环自动终止。
2. 空列表判定为False的原因
你测试的代码:
ls = [] if(not ls): print("empty list evaluates to False")
输出结果:
empty list evaluates to False
空列表属于上文提到的「空序列」假值类别,因此布尔判定结果为False,not ls的结果为True,所以会触发对应打印逻辑。
如果需要自定义类的实例的布尔判定结果,可以重写类的__bool__()方法,或者重写__len__()方法返回0,此时实例就会被判定为False。
内容的提问来源于stack exchange,提问作者Shubham Agrawal
相关产品推荐
相关产品推荐

