如何在python逻辑语句中概念化分组

时间:2016-09-20 22:54:56

标签: python boolean logic

不知道为什么会这样。谁能解释一下?

>>> 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

但我的测试示例中发生了什么?为什么我分别得到真和假?

2 个答案:

答案 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