不知道为什么会这样。谁能解释一下?
>>> foo = ['a', 'b', 'c']
>>> bar = [1, 2, 3]
>>> 'a' in (foo or bar)
True
>>> 'a' in (bar or foo)
False
我知道python从左到右阅读,我应该写出来
>>> 'a' in foo or 'a' in bar
但我的测试示例中发生了什么?为什么我分别得到真和假?
答案 0 :(得分:1)
由于foo为真,foo or bar
会返回foo
:
>>> foo = ['a', 'b', 'c']
>>> bar = [1, 2, 3]
>>> (foo or bar)
['a', 'b', 'c']
在逻辑或陈述中,评估可以在找到第一个真实数量时停止。因此,一旦python将foo
评估为true,就不需要考虑bar
。此外,在逻辑或语句中,python不返回True:它返回第一个计算结果为True的项。
同样,由于bar
为真,bar or foo
会返回bar
。订单很重要:
>>> bar or foo
[1, 2, 3]
另一个例子:
>>> False or 3 or 6
3
答案 1 :(得分:1)
原因在于a or b
在Python中的工作原理。 如果a有值或为True,则会返回 a ,否则返回 b 的值。在你的情况下:
>>> foo or bar
['a', 'b', 'c']
>>> bar or foo
[1, 2, 3]
如果要检查列表中的值,首先使用+
作为单个列表,其中包含两个列表中的元素:
>>> foo + bar
['a', 'b', 'c', 1, 2, 3]
然后你可以将你的条件设为:
>>> 'a' in (foo + bar)
True
>>> 'a' in (bar + foo)
True
或者,您也可以使用or
(不连接列表)来执行此操作:
>>> 'a' in foo or 'a' in bar
True