我有一个字节数组,我想在其中复制所有出现的给定值。
我目前的解决方案确实有效,但我相信一定有更优雅的方法。但是如何?
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)
答案 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))