我有一个按位元素列表,例如[1,1,1],我想在列表中的每个元素之间进行按位或运算。所以,例如
对于 [1,1,1] 做
1 | 1 | 1 = 1
或者对于 [1,17,1] 做
1 | 17 | 17 1 = 17
如何在不循环的情况下做到这一点? Numpy 的 bitwise_or 似乎只适用于 2 个数组。是否有按位&或|它适用于每个元素,类似于 sum 或 np.mean?谢谢。
reduce
与 operator.ior
一起使用:
>>> from operator import ior
>>> lst = [1, 17, 1]
>>> reduce(ior, lst)
17
正如 @DSM 在评论中所建议的,numpy 等效项将是:
>>> import numpy as np
>>> arr = np.array(lst)
>>> np.bitwise_or.reduce(arr)
17
这适用于 numpy reduce:
>>> ar = numpy.array([1,17,1])
>>> numpy.bitwise_or.reduce(ar)
17
不导入任何东西,既不导入任何东西,也不导入任何东西,正如其他答案中所建议的:
numpy
编辑:但是,当我对不同的选项进行基准测试时,速度更快:
operator.ior
第二个选项还有一个优点,它可以在 Python 3 中工作,其中
a = [1,17,1]
reduce(lambda x,y: x | y, a)
已被消除(尽管它仍然可以从
a = [1,17,1]; b = 0
for x in a: b |= x
导入)。
在 Python 3 中,
reduce