如何对 bool 对象列表的列表进行逻辑和操作?

How to do logical and operation on list of bool objects list?

我有一个 bool 对象列表,如下所示:

[[True, True, True, False], [False, True, True, False], [False, False, True, True]]

我想要位和那些列表并得到结果:

[False, False, True, False]

最好的方法是什么?

只要你使用boolean,你就可以zip and then use all:

data = [[True, True, True, False], [False, True, True, False], [False, False, True, True]]
result = [all(e) for e in zip(*data)]
print(result)

输出

[False, False, True, False]

您可以使用 functools.reduce and the bitwise "and" operator.and_, as well as the typical zip(*...) 换位模式:

from functools import reduce
from operator import and_

lst = [[True, True, True, False], [False, True, True, False], [False, False, True, True]]

[reduce(and_, x) for x in zip(*lst)]
# [False, False, True, False]

如果你想专门使用按位运算符&,那么你可以使用functools.reduce with zip:

>>> from functools import reduce
>>> l = [[True, True, True, False], [False, True, True, False], [False, False, True, True]]
>>> [reduce(lambda x, y: x & y, lst) for lst in zip(*l)]
[False, False, True, False]

我们也可以创建自己的迷你函数来替换lambda:

>>> def bitwise_and(x, y):
...     return x & y
...
>>> [reduce(bitwise_and, lst) for lst in zip(*l)]
[False, False, True, False]

或者只使用 operator module, as shown in 答案。