如何将一个值的多个副本附加到 Python 字节数组?
How can I append multiple copies of a value to a Python bytearray?
如果我有一个 Python 列表 (data
) 和两个整数(i
和 count
),我可以轻松地附加 count
个副本i
到 data
:
>>> data = [0]
>>> i, count = 1, 4
>>> data += [i] * count
>>> data
[0, 1, 1, 1, 1]
如果 data
是 bytearray
,我该如何做同样的事情?是否有必要先创建一个列表,例如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')
如果我有一个 Python 列表 (data
) 和两个整数(i
和 count
),我可以轻松地附加 count
个副本i
到 data
:
>>> data = [0]
>>> i, count = 1, 4
>>> data += [i] * count
>>> data
[0, 1, 1, 1, 1]
如果 data
是 bytearray
,我该如何做同样的事情?是否有必要先创建一个列表,例如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')