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

问题描述 投票:0回答:4

我有一个按位元素列表,例如[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?谢谢。

python arrays list numpy bit-manipulation
4个回答
30
投票

您可以将

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

13
投票

这适用于 numpy reduce

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

3
投票

不导入任何东西,既不导入任何东西,也不导入任何东西,正如其他答案中所建议的:


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

0
投票
内置函数

functools 可以与 
reduce
一起使用。
functools.reduce

© www.soinside.com 2019 - 2024. All rights reserved.