删除字节对象的前n个元素而不复制

时间:2017-06-04 16:44:10

标签: python python-3.x byte

我想删除函数中bytes参数的元素。我想要更改参数,而不是返回一个新对象。

def f(b: bytes):
  b.pop(0)   # does not work on bytes
  del b[0]   # deleting not supported by _bytes_
  b = b[1:]  # creates a copy of b and saves it as a local variable
  io.BytesIO(b).read(1)  # same as b[1:]

这里有什么解决方案?

2 个答案:

答案 0 :(得分:1)

只需使用bytearray

>>> a = bytearray(b'abcdef')
>>> del a[1]
>>> a
bytearray(b'acdef')

它几乎像bytes但可变:

  

bytearray类是0 <= x <0的范围内的可变整数序列。 256. Mutable Sequence Types中描述了大多数常用的可变序列方法,以及bytes类型的大多数方法,见Bytes and Bytearray Operations

答案 1 :(得分:0)

使用上面@MSeifert所示的字节数组,可以使用slicing

提取前n个元素。
>>> a = bytearray(b'abcdef')
>>> a[:3]
bytearray(b'abc')
>>> a = a[3:]
a
bytearray(b'def')