如何对 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 答案。
我有一个 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