Python 如何在不同长度的列表之间应用按位异或?
我想做的是初始化一个数组,其中5个元素设置为0,然后将另一个数组复制到第一个数组中,如下所示:Python 如何在不同长度的列表之间应用按位异或?,python,Python,我想做的是初始化一个数组,其中5个元素设置为0,然后将另一个数组复制到第一个数组中,如下所示: a = [0, 0, 0, 0, 0] b = [1, 2, 3] print a | b [1, 2, 3, 0, 0] 除以下情况外,是否有任何类似于蟒蛇的方式: for i, x in enumerate(b): a[i] = x 编辑: 我忘了提到缓冲区a在开始时总是用纯零填充,条件len(b)
a = [0, 0, 0, 0, 0]
b = [1, 2, 3]
print a | b
[1, 2, 3, 0, 0]
除以下情况外,是否有任何类似于蟒蛇的方式:
for i, x in enumerate(b):
a[i] = x
编辑:
我忘了提到缓冲区a
在开始时总是用纯零填充,条件len(b)
总是true
,而且在每种情况下,缓冲区a
总是从索引0
开始被覆盖
我会首先解释为什么我需要这种行为,基本上我有一个原始的256字节UDP帧。缓冲区a
对应于帧中的字节16-31。根据某些条件,这些字节将被覆盖或设置为0,b
的长度始终为12
def foo(b=12*[0]):
a = 16*[0]
return a[:12] = b[:]
这适用于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
,但是如果您事先知道您已经需要它的所有值,那么可以立即创建一个列表
这是邮政编码最长的文件:
直接使用列表理解(py3):
这适用于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
,但是如果您事先知道您已经需要它的所有值,那么可以立即创建一个列表
这是邮政编码最长的文件:
直接使用列表理解(py3):
首先,为什么要浪费时间定义
a
?您只需将正确数量的0
s附加到b
即可:
>>> b = [1, 2, 3]
>>> a = b + [0] * (5 - len(b))
>>> a
[1, 2, 3, 0, 0]
首先,为什么要浪费时间定义
a
?您只需将正确数量的0
s附加到b
即可:
>>> b = [1, 2, 3]
>>> a = b + [0] * (5 - len(b))
>>> a
[1, 2, 3, 0, 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))
类似这样的内容(注意: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))
为什么不把
g
listcomp做一个呢?@e.s.你比我的编辑速度快:-)。我在这里解释了原因。我将再次编辑以使其更加明显。我意识到我的答案与问题的标题有关,而@Ignacio Vazquez Abrams的答案更接近实际需要。@SamuelGIFFARD也许问题的标题应该编辑,以便与OP的实际问题相匹配。否则,它将误导未来读者们。为什么不把g
a列表整理一下呢?@e.s.你比我的编辑速度快:-)。我在这里解释了原因。我将再次编辑以使其更加明显。我意识到我的答案与问题的标题有关,而@Ignacio Vazquez Abrams的答案更接近实际需要。@SamuelGIFFARD也许应该编辑问题的标题,使其与OP的实际问题相匹配。否则,它会误导未来的读者。我认为这是行不通的。如果a=[0,1,0,0,0]
呢?您的输出也将是[1,2,3,0,0]
。但是[1,1,3,0,0]
可能是正确的答案。至少我是这样理解这个问题的。@miindlek:这个问题有相互矛盾的标准。我决定根据第二个代码片段来实现“将另一个数组复制到第一个数组”的标准。我认为这行不通。如果a=[0,1,0,0,0]
呢?您的输出也将是[1,2,3,0,0]
。但是[1,1,3,0,0]
可能是正确的答案。至少这就是我如何理解这个问题的。@miindlek:这个问题有冲突的标准。我决定根据第二个代码片段实现“将另一个数组复制到第一个数组”的标准。您希望a=[0,1,0,0,0]
有什么输出?希望“编辑”部分有点清晰:)您希望a=[0,1,0,0,0]
有什么输出?希望“编辑”部分有点清晰:)