为什么是('a' in arr) in arr!= 'a' in arr in arr?
('a' in arr) in arr
'a' in arr in arr
arr = [1, True, 'a', 2] print(('a' in arr) in arr) # -> True print('a' in arr in arr) # -> False
('a' in arr) in arr和之间的差异'a' in arr in arr是由于Python 中的运算顺序in以及在每种情况下运算符的解释方式造成的。
in
arr = [1, True, 'a', 2] print(('a' in arr) in arr) # -> True
这里'a' in arr首先求表达式的值,检查字符串是否'a'是列表的元素arr。由于'a'确实是的元素arr,因此结果为True。
'a' in arr
'a'
arr
True
现在,表达式变成:
True in arr
因此,Python 检查布尔值是否True是列表的元素arr,并且由于True确实是的元素arr(它作为第二个元素出现),所以最终结果是True。
arr = [1, True, 'a', 2] print('a' in arr in arr) # -> False
这个表达式乍一看可能有点奇怪,但in在这种情况下,Python 将其解释为链式比较运算符。它的计算方式如下:
('a' in arr) and (arr in arr)
arr in arr
False
所以整个表达式变成:
True and False
其计算结果为False。
因此,由于 Pythonin根据上下文对运算符的解释方式不同,这两个表达式并不相等。