首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"('a‘in arr)在arr“!=’a‘in arr"?

为什么"('a‘in arr)在arr“!=’a‘in arr"?
EN

Stack Overflow用户
提问于 2020-02-25 18:02:01
回答 3查看 114关注 0票数 5

为什么('a' in arr) in arr != 'a' in arr in arr

代码语言:javascript
复制
arr = [1, True, 'a', 2]
print(('a' in arr) in arr)  # -> True
print('a' in arr in arr)  # -> False
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-25 18:22:15

Python语言引用的第6.10节讨论比较运算符和比较链。in被认为是比较运算符,因此它的行为与<等相同。对于任何两个比较运算符,如果没有显式分组的括号,x OP1 y OP2 z就等于x OP1 y and y OP2 z

这意味着

代码语言:javascript
复制
'a' in arr in arr

如果没有括号,则等于

代码语言:javascript
复制
'a' in arr and arr in arr

arr本身不是一个元素,所以表达式是False.

括号禁用链接,因此

代码语言:javascript
复制
('a' in arr) in arr

与任何其他嵌套表达式一样计算。首先将'a' in arr计算为值True,然后计算True in arr以生成True

票数 8
EN

Stack Overflow用户

发布于 2020-02-25 18:15:57

我可能错了,但我认为in就像任何二进制运算符,所以就像a < b < c(a < b) and (b < c)一样,您将有

代码语言:javascript
复制
a in b in c

相当于

代码语言:javascript
复制
(a in b) and (b in c)

'a' in arr是真,但arr in arr是假的,这就是为什么您有一个False值。

票数 3
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60400708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档