Python列表中`not`运算符的奇怪行为

5
当我使用Python的 not 运算符来检查列表是否为空时,它表现得很奇怪。
我尝试使用 not 运算符与列表一起使用,以检查其是否为空。
>>> a = []
>>> not (a)
True
>>> not (a) == True
True
>>> not (a) == False
True
>>> True == False
False
< p >对于not (a) == False的预期输出应该是False。< /p >
2个回答

11
==优先级高于notnot (a) == False被解析为not (a == False)

2

这个结果符合预期。下面添加括号以阐明执行方式:

not (a == True)
# True
not (a == False)
# True

一个空列表 a = [] 在布尔表达式中会被 判定False,��它不等于 FalseTrue。你的语句测试它是否等于 FalseTrue,所以它们都会被判定为 False,而 not False 就是 True
你可以加括号像下面这样来得到你期望的结果:
(not a) == True
# True
(not a) == False
# False

为了完整起见:您可以将其转换为布尔值以强制进行布尔计算。bool([])返回False。因此:bool(a) == False甚至bool(a) is False都是True - agtoever

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