将字节数组插入字节数组 Python

Rus*_*ell 5 python insert

我试图在开始时将一个字节数组插入另一个数组。这是我正在尝试完成的一个简单示例。

import struct
a = bytearray(struct.pack(">i", 1))
b = bytearray(struct.pack(">i", 2))
a = a.insert(0, b)
print(a)
Run Code Online (Sandbox Code Playgroud)

但是,这失败并出现以下错误:

a = a.insert(0, b) TypeError: an integer is required

jua*_*aga 8

bytearray是一种序列类型,它支持基于切片的操作。i带有切片的“在位置插入”习语是这样的x[i:i] = <a compatible sequence>。所以,对于拳头位置:

>>> a
bytearray(b'\x00\x00\x00\x01')
>>> b
bytearray(b'\x00\x00\x00\x02')
>>> a[0:0] = b
>>> a
bytearray(b'\x00\x00\x00\x02\x00\x00\x00\x01')
Run Code Online (Sandbox Code Playgroud)

对于第三个位置:

>>> a
bytearray(b'\x00\x00\x00\x01')
>>> b
bytearray(b'\x00\x00\x00\x02')
>>> a[2:2] = b
>>> a
bytearray(b'\x00\x00\x00\x00\x00\x02\x00\x01')
Run Code Online (Sandbox Code Playgroud)

请注意,这不等同于.insert,因为对于序列,.insert 将整个对象作为第 i 个元素插入。因此,请考虑以下带有列表的简单示例:

>>> y = ['a','b']
>>> x.insert(0, y)
>>>
>>> x
[['a', 'b'], 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

真正想要的是:

>>> x
[1, 2, 3]
>>> y
['a', 'b']
>>> x[0:0] = y
>>> x
['a', 'b', 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

  • @Russell因为`.insert`尝试*插入对象,即整个bytearray*作为第i个元素。但这不是您想要的,字节数组只能包含*字节*,而不是字节数组对象。想一想:`x = [1,2,3]; y = ['a','b']; x.insert(0,y)` 会给你 `x == [['a', 'b'], 1, 2, 3]` (2认同)