为什么('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发布于 2020-02-25 18:22:15
Python语言引用的第6.10节讨论比较运算符和比较链。in被认为是比较运算符,因此它的行为与<等相同。对于任何两个比较运算符,如果没有显式分组的括号,x OP1 y OP2 z就等于x OP1 y and y OP2 z。
这意味着
'a' in arr in arr如果没有括号,则等于
'a' in arr and arr in arrarr本身不是一个元素,所以表达式是False.。
括号禁用链接,因此
('a' in arr) in arr与任何其他嵌套表达式一样计算。首先将'a' in arr计算为值True,然后计算True in arr以生成True。
发布于 2020-02-25 18:15:57
我可能错了,但我认为in就像任何二进制运算符,所以就像a < b < c与(a < b) and (b < c)一样,您将有
a in b in c相当于
(a in b) and (b in c)'a' in arr是真,但arr in arr是假的,这就是为什么您有一个False值。
发布于 2020-02-25 18:26:34
考虑到arr=[1,True,'a',2],
解码第一个表达式:('a' in arr) in arr,
分步
('a' in arr) in arr评估为(True) in [1,True,'a',2]评估为True解码第二个表达式:('a' in arr in arr)
分步
('a' in arr in arr),这相当于('a' in arr and arr in arr),其计算值为(True and False),其计算值为(False)更多信息:优先级和关联性质https://www.programiz.com/python-programming/precedence-associativity
https://stackoverflow.com/questions/60400708
复制相似问题