有没有用于布尔列表的逐元素布尔操作的内置函数?

28 投票
5 回答
31022 浏览
提问于 2025-04-15 22:22

比如说,如果你有 n 个长度相同的布尔值列表,那么逐个元素进行布尔与运算应该返回一个同样长度的列表,只有在所有输入列表对应位置都是 True 的时候,这个位置才会是 True,其他地方都是 False。

这个操作其实很简单,我只是更希望能用一个内置的函数(这样可以让代码更标准、更易读)。

下面是逐个元素进行与运算的实现:

def eAnd(*args):
    return [all(tuple) for tuple in zip(*args)]

示例用法:

>>> eAnd([True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True])
[True, False, False, False, True]

5 个回答

3

numpy.all这个函数可以满足你的需求,只要你指定要压缩的维度就可以了:

>>> all([[True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True]], 0)
array([ True, False, False, False,  True], dtype=bool)
21

试试这个:

[ x&y for (x,y) in zip(list_a, list_b)]

如果你在处理非常长的列表,或者你的某些变量需要是numpy数组,那么相应的numpy代码可以是:

list( np.array(list_a) & np.array(list_b) )

根据你的需求进行修改。

23

这个功能在Python里没有现成的方法。一般来说,列表推导式和类似的方式是你在Python中进行逐个元素操作的方式。

Numpy提供了这个功能(使用&,是因为一些技术限制)在它的数组类型中。Numpy数组通常会逐个元素地进行操作。

撰写回答