Yoh*_*dia 11 python list logical-operators
我得到一个奇怪的结果,我尝试将and或or运算符应用于python中的2个布尔列表.我实际上得到了与我期望的完全相反的东西.
[True, False, False] and [True, True, False]
> [True, True, False]
[True, False, False] or [True, True, False]
> [True, False, False]
Run Code Online (Sandbox Code Playgroud)
这是正常的,如果是的话,为什么?
jas*_*per 10
如果您真正想要的是两个列表之间的元素方式布尔运算,请考虑使用该numpy模块:
>>> import numpy as np
>>> a = np.array([True, False, False])
>>> b = np.array([True, True, False])
>>> a & b
array([ True, False, False], dtype=bool)
>>> a | b
array([ True, True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
这是正常的,因为and和or实际评价他们的一个操作数。x and y就好像
def and(x, y):
if x:
return y
return x
Run Code Online (Sandbox Code Playgroud)
虽然x or y就像
def or(x, y):
if x:
return x
return y
Run Code Online (Sandbox Code Playgroud)
由于两个列表都包含值,因此它们都是“真实的”,因此and求值为第二个操作数,而or求值为第一个。
您的列表不是比较每个单独的值,而是比较列表中值的存在情况。
对于任何真实变量a和b:
a and b
> b #The program evaluates a, a is truthy, it evaluates b, b is truthy, so it returns the last evaluated value, b.
a or b
> a #The program evaluates a, a is truthy, so the or statement is true, so it returns the last evaluated value, a.
Run Code Online (Sandbox Code Playgroud)
现在,真实性取决于类型。例如,整数对于 为真my_int != 0,对于 为假my_int == 0。所以如果你有:
a = 0
b = 1
a or b
> b #The program evaluates a, a is falsy, so the or statement goes on to evaluate b, b is truthy, so the or statement is true and it returns the last evaluated value b.
Run Code Online (Sandbox Code Playgroud)