【问题标题】:Why does this not work as an array membership test? [duplicate]为什么这不能作为数组成员测试? [复制]
【发布时间】:2019-07-07 23:57:48
【问题描述】:
>>> 5 in [1, 2, 3, 4] == False
False

我知道这是一种奇怪的会员资格测试方式,而且

>>> 5 not in [1, 2, 3, 4]
True

是“正确”的方式。让我感到困惑的是,它的行为与两者都不同

>>> (5 in [1, 2, 3, 4]) == False
True

>>> 5 in ([1, 2, 3, 4] == False)
TypeError ...

我是否遗漏了一些明显的东西? (在 Python 2.7 和 Python 3.4 中测试)。

为了澄清,我理解最后三个 sn-ps。我在问first sn-p 的行为,以及为什么它不同。

【问题讨论】:

  • 这绝对是一个骗子,但我找不到合适的骗子候选人。
  • 好吧……那你怎么知道是骗子?
  • @user2357112 - This 似乎很接近。
  • @user2357112 - 找到一个好的。
  • @TigerhawkT3:这个问题是骗人的,但这个问题的答案很糟糕。他们都没有解释任何事情。

标签: python python-2.7 python-3.x


【解决方案1】:

这是一个链式比较。你可能已经知道你可以做到

1 < 2 < 3

在 Python 中,它相当于(1 &lt; 2) and (2 &lt; 3)。 (或者你可能没有。现在你知道了。)好吧,同样的事情也适用于in==

5 in [1, 2, 3, 4] == False

等价于

(5 in [1, 2, 3, 4]) and ([1, 2, 3, 4] == False)

由于[1, 2, 3, 4] 不等于False,整个表达式的计算结果为False

【讨论】:

  • 太棒了!我知道链式比较;我没有意识到他们申请了in。好答案!
  • 这是一个普通的笏。我实际上试图将innot in 记录为comparison operators,因为它们在grammar 中实际上是定义 作为比较的,但在bugs.python.org 上没有得到太多支持
  • 我也在考虑将缺乏文档也作为错误报告;我想这是一个失败的原因。知道为什么它是比较运算符吗?我想不出这种行为有用的任何情况。
  • @IanKuehne:我猜想实现将它们与其他比较运算符结合起来很方便,而且他们不太关心链接行为。
猜你喜欢
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多