如果我有一个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)
?
答案 0 :(得分:2)
是否有必要先创建一个列表,例如
data += bytearray([i] * count)
?
这确实是一种方法。您可以对字节数组(而不是列表)执行乘法运算,这对于count
*的大值更快,内存效率更高,更多更快
>>> data = bytearray([0])
>>> i, count = 1, 4
>>> data += bytearray((i,)) * count
>>> data
bytearray(b'\x00\x01\x01\x01\x01')
*来源:在我的机器上工作;因人而异!尝试计数4000000000,在列表乘以时内存不足,但在乘以bytearray时则没有。较小的count
(600000000)值在乘以列表时使用的内存大于乘以bytearray时的8倍。
答案 1 :(得分:2)
如果您不介意使用import
我建议使用itertools.repeat
。
>>> from itertools import repeat
>>> data = bytearray([0])
>>> data.extend(repeat(1, 3))
>>> data
bytearray(b'\x00\x01\x01\x01')