列表中元素之间的按位运算

时间:2014-09-11 20:15:05

标签: python arrays list numpy bit-manipulation

我有一个按位元素列表,例如[1,1,1],我想在列表中的每个元素之间进行按位OR运算。所以,例如。

for [1,1,1] do

1 | 1 | 1 = 1

或[1,17,1]做

1 | 17 | 1 = 17

如何在不循环的情况下执行此操作? Numpy的bitwise_or似乎只适用于2个阵列。是否有点&或者适用于每个元素,类似于sum或np.mean?谢谢。

3 个答案:

答案 0 :(得分:19)

您可以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

答案 1 :(得分:7)

适用于numpy reduce

>>> ar = numpy.array([1,17,1])
>>> numpy.bitwise_or.reduce(ar)
17

答案 2 :(得分:0)

如其他答案中所建议,numpyoperator.ior都不会导入任何东西,

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(尽管仍然可以从functools导入)。