Python中all()函数返回结果不符合预期的技术咨询
问题分析与解答
首先我们来实际拆解你提到的代码逻辑:
not(0):0在Python中是布尔假值,not取反后得到True- 由于Python中布尔类型是整数的子类,
True等价于整数1,所以True + 1的结果是2,因此列表a最终是[2] all()函数会遍历可迭代对象中的所有元素,只有当所有元素都是真值时才返回True,而2显然是真值(Python中除0、空对象、None等少数值外,都是真值),所以print(all(a))的正确输出应该是True
那你得到False的原因,大概率是代码的写法和你描述的不一致,最常见的情况是运算符优先级导致的计算顺序错误:
如果你代码里写的是a=[not 0+1](没有给not(0)加括号),那Python会按照运算符优先级先计算0+1得到1,再对1取反得到False,此时列表a是[False],调用all(a)自然会返回False。
另外也可以排查这几个可能性:
- 是不是运行代码时不小心修改了列表
a的内容?比如之后有其他代码对a做了变更 - 有没有可能是Python版本的问题?不过不管是Python2还是Python3,布尔值和整数的运算逻辑都是一致的,所以这个可能性极低
总结一下:你描述的代码本身运行结果确实是True,出现False的情况应该是代码实际写法和预期有偏差,或者后续有修改列表的操作。
内容的提问来源于stack exchange,提问作者Biswadeep Roy
相关产品推荐
相关产品推荐

