了解OR运算符

时间:2019-08-27 17:58:18

标签: python

刚开始在IDLE中学习Python并遇到了这个问题:

numArray = [1, 2, 3, 1]
(1 or 7) in numArray #returns True
(7 or 1) in numArray #returns False

为什么(7或1)返回False?

4 个答案:

答案 0 :(得分:2)

or操作返回两个值之间的第一个True操作数。如果所有操作数均为False,则返回最后一个操作数。示例:

>>> 7 or 1
7
>>> bool(7)
True
>>> 
>>> False or 0
0
>>> bool(0)
False
>>> 

因此它发现7不在列表中,并返回False

  

如果您正在使用或在Python中测试两个对象,则运算符将返回计算为true的第一个对象或表达式中的最后一个对象,无论其真值如何-{{ 3}}

答案 1 :(得分:2)

这是因为出于真实性,or是从左到右求值的。 17都不为零,因此它们很“真实”。

您要告诉Python按照您的逻辑进行以下操作。

  

1或7不是零吗?

     

Python在1处停止。 1是真实的。所以()中的任何内容   解析为11也在您的列表中。

     

7或1不是零吗?

     

Python停在77是真实的。无论内在   ()解析为77在您的列表中不是

答案 2 :(得分:1)

您的意图类似于7 in numArray or 1 in numArray,但是or并不是那样。首先评估7 or 1,然后将 result 用作in的第一个操作数。由于7 or 1的值为7,因此您正在测试7 in numArray是否为真。

您似乎想改用any函数。

any(x in numArray for x in [1, 7])  # True
any(x in numArray for x in [7, 1])  # Also True

两者之间的区别是第一个会更快返回;一旦发现1 in numArray为真,它将立即返回而无需费心检查任何其他值。第二个发现7不在numArray中,然后移至下一个值。

答案 3 :(得分:0)

numArray = [1, 2, 3, 1]

现在让我们看一下操作:

(1 or 7) = 1 
# The or operator stops evaluating when it finds an operand True. In this case, it stops at 1

1在数组中,这就是True

的原因
(7 or 1) = 7
# The or operator stops when it finds an operand True. In this case, it stops at 7

7不在数组中,这就是False

的原因

当您这样做:

(0 or 7) 
# The result would be `7` as the first operand is `0` and considered as `false` and hence the second operand is evaluated.

但是,and运算符会在从左到右找到操作数'False'时停止计算,否则会一直计算到最后一个。

(1 and 7) = 7
# Evaluates till the end since it did not find False and results in 7

(7 and 1) = 7
# Evaluates till the end since it did not find False and results in 1

(0 and 5) = 0
# The first operand is False and it stops here and results in 0