小能豆

为什么“('a' in arr) in arr”!=“'a' in arr in arr”?

py

为什么是('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

阅读 21

收藏
2024-11-15

共1个答案

小能豆

('a' in arr) in arr和之间的差异'a' in arr in arr是由于Python 中的运算顺序in以及在每种情况下运算符的解释方式造成的。

1. ('a' in arr) in arr

arr = [1, True, 'a', 2]
print(('a' in arr) in arr)  # -> True

这里'a' in arr首先求表达式的值,检查字符串是否'a'是列表的元素arr。由于'a'确实是的元素arr,因此结果为True

现在,表达式变成:

True in arr

因此,Python 检查布尔值是否True是列表的元素arr,并且由于True确实是的元素arr(它作为第二个元素出现),所以最终结果是True

2. 'a' in arr in arr

arr = [1, True, 'a', 2]
print('a' in arr in arr)  # -> False

这个表达式乍一看可能有点奇怪,但in在这种情况下,Python 将其解释为链式比较运算符。它的计算方式如下:

('a' in arr) and (arr in arr)
  1. 'a' in arr检查是否'a'是的元素arr。这是True因为'a'在列表中arr
  2. arr in arr检查列表是否arr是其自身的元素。由于 Python 中的列表不被视为其自身的元素(列表arr不是 中的元素arr),因此返回False

所以整个表达式变成:

True and False

其计算结果为False

差异总结

  • ('a' in arr) in arr:首先检查是否'a'arr,结果为True,然后检查是否Truearr,即True
  • 'a' in arr in arr:这被解释为链式比较(('a' in arr) and (arr in arr)),False因为arr in arr是,所以计算结果为False

因此,由于 Pythonin根据上下文对运算符的解释方式不同,这两个表达式并不相等。

2024-11-15