字节数组中的重复字节

时间:2021-02-24 13:26:55

标签: python

我有一个字节数组,我想在其中复制所有出现的给定值。

我目前的解决方案确实有效,但我相信一定有更优雅的方法。但是如何?

jsch.addIdentity( "path/to/your/key" );

x = bytearray([0x01, 0x02, 0x03, 0xff, 0x04, 0x05]) r = 0xff skip = False for i, v in enumerate(x): if skip: skip = False continue if v == r: x.insert(i, r) skip = True print(x)

3 个答案:

答案 0 :(得分:3)

您可以通过以下方式使用 .replace 方法执行此任务:

x = bytearray([0x01, 0x02, 0x03, 0xff, 0x04, 0x05])
r = b'\xff'
dx = x.replace(r, r*2)
print(dx)

输出:

bytearray(b'\x01\x02\x03\xff\xff\x04\x05')
.replace

bytearray 类似于同名的 str 方法。请注意,r 应该类似于字节,所以我使用了 bytes

答案 1 :(得分:1)

使用一个生成器函数,它发出输入中的每一项,如果它是要复制的值,则再次发出它:

def repeat_value(values, repeating_value):
    for v in values:
        yield v
        if v == repeating_value:
            yield v

您需要将结果转换回 bytearray

>>> bytearray(repeat_value(x, r))
bytearray(b'\x01\x02\x03\xff\xff\x04\x05')

它也适用于任何其他类型的可迭代对象:

>>> ''.join(repeat_value('hello world', 'o'))
'helloo woorld'
>>> list(repeat_value(range(10), 5))
[0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9]

答案 2 :(得分:1)

如果函数运行时值 r 不会改变,并且顺序无关紧要,您可以简单地计算出现的次数,然后一次性全部附加。

x.extend([r] * x.count(r))