问题
I have come from a matlab background to python and i am just wondering if there is a simple operator in python that will perform the following function:
a = [1, 0, 0, 1, 0, 0]
b = [0, 1, 0, 1, 0, 1]
c = a|b
print c
[1, 1, 0, 1, 0, 1]
or would i have to write a separate function to do that?
回答1:
You could use a list comprehension. Use izip
from itertools if you're using Python 2.
c = [x | y for x, y in zip(a, b)]
Alternatively, @georg pointed out in a comment that you can import the bitwise or operator and use it with map
. This is only slightly faster than the list comprehension. map
doesn't need wrapped with list()
in Python 2.
import operator
c = list(map(operator.or_, a, b))
Performance
List comprehension:
$ python -m timeit -s "a = [1, 0, 0, 1, 0, 0]; b = [0, 1, 0, 1, 0, 1]" \
> "[x | y for x, y in zip(a, b)]"
1000000 loops, best of 3: 1.41 usec per loop
Map:
$ python -m timeit -s "a = [1, 0, 0, 1, 0, 0]; b = [0, 1, 0, 1, 0, 1]; \
> from operator import or_" "list(map(or_, a, b))"
1000000 loops, best of 3: 1.31 usec per loop
NumPy
$ python -m timeit -s "import numpy; a = [1, 0, 0, 1, 0, 0]; \
> b = [0, 1, 0, 1, 0, 1]" "na = numpy.array(a); nb = numpy.array(b); na | nb"
100000 loops, best of 3: 6.07 usec per loop
NumPy (where a
and b
have already been converted to numpy arrays):
$ python -m timeit -s "import numpy; a = numpy.array([1, 0, 0, 1, 0, 0]); \
> b = numpy.array([0, 1, 0, 1, 0, 1])" "a | b"
1000000 loops, best of 3: 1.1 usec per loop
Conclusion: Unless you need NumPy for other operations, it's not worth the conversion.
回答2:
If your data was in numpy arrays then yes this would work:
In [42]:
a = np.array([1, 0, 0, 1, 0, 0])
b = np.array([0, 1, 0, 1, 0, 1])
c = a|b
print(c)
[1 1 0 1 0 1]
Out[42]:
[1, 1, 0, 1, 0, 1]
回答3:
map(lambda (a,b): a|b,zip(a,b))
回答4:
You can use numpy.bitwise_or
>>> import numpy
>>> a = [1, 0, 0, 1, 0, 0]
>>> b = [0, 1, 0, 1, 0, 1]
>>> numpy.bitwise_or(a,b)
array([1, 1, 0, 1, 0, 1])
回答5:
c = [q|w for q,w in zip(a,b)]
print c
# [1, 1, 0, 1, 0, 1]
来源:https://stackoverflow.com/questions/29251618/is-there-a-binary-or-operator-in-python-that-works-on-arrays