Python列表中的布尔值比较给出了奇怪的结果

vir*_*ati 5 python comparison boolean list

我尝试:

[True,True,False] and [True,True,True]
Run Code Online (Sandbox Code Playgroud)

得到[真,真如此]

[True,True,True] and [True,True,False]
Run Code Online (Sandbox Code Playgroud)

[True,True,False]
Run Code Online (Sandbox Code Playgroud)

不太确定为什么它会给出那些奇怪的结果,即使在看了一些其他的python布尔比较问题之后.整数也是这样(替换True - > 1和False - > 0,结果相同).我错过了什么?我显然想要

[True,True,False] and [True,True,True]
Run Code Online (Sandbox Code Playgroud)

评估

[True,True,False]
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 6

其他人已经解释了发生了什么.以下是获得所需内容的一些方法:

>>> a = [True, True, True]
>>> b = [True, True, False]
Run Code Online (Sandbox Code Playgroud)

使用listcomp:

>>> [ai and bi for ai,bi in zip(a,b)]
[True, True, False]
Run Code Online (Sandbox Code Playgroud)

使用以下and_功能map:

>>> from operator import and_
>>> map(and_, a, b)
[True, True, False]
Run Code Online (Sandbox Code Playgroud)

或者我的首选方式(虽然这确实需要numpy):

>>> from numpy import array
>>> a = array([True, True, True])
>>> b = array([True, True, False])
>>> a & b
array([ True,  True, False], dtype=bool)
>>> a | b
array([ True,  True,  True], dtype=bool)
>>> a ^ b
array([False, False,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)


job*_*208 5

任何填充列表的计算结果为True.True and x生产x,第二个清单.


Mar*_*som 5

Python文档:

表达式x和y首先计算x; 如果x为false,则返回其值; 否则,将评估y并返回结果值.

你得到了第二个返回的值.

PS我以前从未见过这种行为,我不得不自己查一下.我天真的期望是布尔表达式会产生一个布尔结果.