刚开始在IDLE中学习Python并遇到了这个问题:
numArray = [1, 2, 3, 1]
(1 or 7) in numArray #returns True
(7 or 1) in numArray #returns False
为什么(7或1)返回False?
答案 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
是从左到右求值的。 1
和7
都不为零,因此它们很“真实”。
您要告诉Python按照您的逻辑进行以下操作。
1或7不是零吗?
Python在
1
处停止。1
是真实的。所以()
中的任何内容 解析为1
。1
也在您的列表中。7或1不是零吗?
Python停在
7
,7
是真实的。无论内在()
解析为7
。7
在您的列表中不是。
答案 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