我想要做的是初始化一个有5个元素设置为0的数组,然后将另一个数组复制到第一个数组,如下所示:
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
print a | b
[1, 2, 3, 0, 0]
除此之外是否有任何pythonic方式:
for i, x in enumerate(b):
a[i] = x
修改
我忘了提到缓冲区a
将始终在开头填充普通零,条件len(b) < len(a)
始终为true
,在每种情况下缓冲区a
都会总是从索引0
开始被覆盖。
我首先解释为什么我需要这种行为,基本上我有一个原始的256字节UDP帧。缓冲区a
对应于帧中的字节16-31。根据某些条件,这些字节将被覆盖或设置为0,b
的长度始终为12。
def foo(b=12*[0]):
a = 16*[0]
return a[:12] = b[:]
答案 0 :(得分:3)
>>> a[:len(b)] = b[:]
>>> a
[1, 2, 3, 0, 0]
答案 1 :(得分:1)
这适用于Python 2:
import itertools
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
g = (l | r for (l, r) in itertools.izip_longest(a, b, fillvalue=0))
print list(g)
这在Python 3中:
import itertools
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
g = (l | r for (l, r) in itertools.zip_longest(a, b, fillvalue=0))
print(list(g))
我创建了一个生成器g
,但如果您事先知道它已经想要它的所有值,那么可以立即获得列表理解。
这是zip_longest
的文档:https://docs.python.org/3/library/itertools.html#itertools.zip_longest
直接使用列表推导(py3):
import itertools
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
g = [l | r for (l, r) in itertools.zip_longest(a, b, fillvalue=0)]
print(g)
答案 2 :(得分:1)
为什么要浪费时间来定义a
?您只需将0
的{{1}}添加到b
即可:
>>> b = [1, 2, 3]
>>> a = b + [0] * (5 - len(b))
>>> a
[1, 2, 3, 0, 0]
答案 3 :(得分:0)
这样的事情(注意:XOR运算符是^
?
import itertools
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
def safeXOR(arr1, arr2):
return list((x ^ y for (x, y) in itertools.zip_longest(arr1, arr2, fillvalue=0)))
print(safeXOR(a,b))