如何将值的多个副本附加到Python bytearray?

如何将值的多个副本附加到Python bytearray?,python,arrays,list,python-bytearray,Python,Arrays,List,Python Bytearray,如果我有一个Python列表(data)和两个整数(I和count),我可以轻松地将I的副本附加到数据中: >>> data = [0] >>> i, count = 1, 4 >>> data += [i] * count >>> data [0, 1, 1, 1, 1] 如果数据是一个字节数组,我该怎么做?是否需要先创建一个列表,例如,data+=bytearray([i]*count) 是否需要先创建一个列表,例如,

如果我有一个Python列表(
data
)和两个整数(
I
count
),我可以轻松地将
I
的副本附加到
数据中:

>>> data = [0]
>>> i, count = 1, 4
>>> data += [i] * count
>>> data
[0, 1, 1, 1, 1]
如果
数据
是一个
字节数组
,我该怎么做?是否需要先创建一个列表,例如,
data+=bytearray([i]*count)

是否需要先创建一个列表,例如,
data+=bytearray([i]*count)

这确实是一种方法。您可以在字节数组(与列表相反)上执行乘法操作,这对于
count
*”的大值来说,内存效率略高,速度也快得多:

>数据=字节数组([0])
>>>i,计数=1,4
>>>数据+=字节数组((i,)*计数
>>>资料
字节数组(b'\x00\x01\x01\x01\x01\x01')

*来源:在我的机器上工作;YMMV!尝试使用4000000000计数,当与列表相乘时内存不足,但与bytearray相乘时内存不足。
count(600000000)的较小值在与列表相乘时使用的内存是与bytearray相乘时使用的内存的8倍以上。

如果您不介意使用
import
我建议使用
itertools。重复

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

你试过什么吗?如果不起作用,代码和错误是什么?我在开始时提供的代码中没有看到任何
bytearray
。我想对“快速”断言提出质疑——在我的机器上,当使用600000000次迭代进行测试时,它比原始乘法慢27倍多:随着数字的增加,差距似乎也会进一步扩大,虽然这可能部分是由于python的预热时间被排除在等式之外。@Score_下,在小型N itertools上,在[32]中我的机器上的速度高达:)40%:%timeit s=bytearray();s、 扩展(重复(1000000))

100个循环,每个循环的最佳时间为3:10.4 ms
在[33]:%timeit bytearray([1]*1000000)
100个循环,最好是3:15毫秒/循环
对于如此庞大的数字,我想速度放缓是由于数组重新分配中的交换。您需要将bytearray相乘,而不是列表相乘。列表相乘可能是效率最低的方法,这就是为什么我在回答中很快避开了它。出于某种原因,我不能提及你,这是一只虫子吗?@Score_Under,你完全正确;刚刚测试了
15.2ms
vs
317µs
。我关于O(1)内存的断言也可能是错误的,因为不断增长的数组需要重新分配,这通常涉及malloc+memcpy+free