有没有用于布尔列表的逐元素布尔操作的内置函数?
比如说,如果你有 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数组通常会逐个元素地进行操作。