如何将一个值的多个副本附加到 Python 字节数组?

How can I append multiple copies of a value to a Python bytearray?

如果我有一个 Python 列表 (data) 和两个整数(icount),我可以轻松地附加 count 个副本idata:

>>> data = [0]
>>> i, count = 1, 4
>>> data += [i] * count
>>> data
[0, 1, 1, 1, 1]

如果 databytearray,我该如何做同样的事情?是否有必要先创建一个列表,例如data += bytearray([i] * count)?

Is it necessary to create a list first, e.g. data += bytearray([i] * count)?

这确实是一种方法。您可以在字节数组(而不是列表)上执行乘法运算,它的内存效率稍微高一些,并且 much 对于 count* 的大值更快:

>>> data = bytearray([0])
>>> i, count = 1, 4
>>> data += bytearray((i,)) * count
>>> data
bytearray(b'\x00\x01\x01\x01\x01')

* 来源:在我的机器上工作; YMMV!尝试使用 4000000000 的计数,它在乘以列表时内存不足,但在乘以字节数组时却没有。 count (600000000) 的较小值在乘以列表时使用的内存是乘以字节数组时的 8 倍多。

如果您不介意使用 import,我建议您使用 itertools.repeat

>>> from itertools import repeat
>>> data = bytearray([0])
>>> data.extend(repeat(1, 3))
>>> data
bytearray(b'\x00\x01\x01\x01')