Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不同长度的列表之间应用按位异或?_Python - Fatal编程技术网

Python 如何在不同长度的列表之间应用按位异或?

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)

我想做的是初始化一个数组,其中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)
总是
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]
有什么输出?希望“编辑”部分有点清晰:)