Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2022 22:20:55

snakeous
Зарегистрирован: 2021-04-25
Сообщения: 9
Репутация: +  0  -
Профиль  

bytearray slice одновременная замена

 #!/usr/bin/env python3
# у нас есть строка
a = bytearray('1 first 2 second 3', 'utf-8')
# и нужные нам смещения
slice1 = [2, 7]
slice2 = [10, 16]
# магия строк :)
#a[slice1[0]:slice1[1]] = b'qwertqwertqwert'
a[slice2[0]:slice2[1]] = b'asdfghasdfghasdfghbb'
# По-отдельности работает!
# Как сделать так,
# чтобы получилось bytearray(b'1 qwertqwertqwert 2 asdfghasdfghasdfghbb 3') ?
#
# уточнение: да, строка, на которую мы заменяем, может быть короче, такая же или длиннее смещения
print(a)



——————————————————————
Я новичок в Python, не судите строго :)

Офлайн

#2 Апрель 14, 2022 23:31:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

bytearray slice одновременная замена

  
>>> def replace(string, slc_seq, rep):
...     for slc in reversed(slc_seq):
...         string[slc[0]:slc[1]] = rep
... 
>>> a = bytearray('1 first 2 second 3', 'utf-8')
>>> a
bytearray(b'1 first 2 second 3')
>>> 
>>> replace(a, ((2, 7), (10, 16)), b'asdfghasdfghasdfghbb')
>>> a
bytearray(b'1 asdfghasdfghasdfghbb 2 asdfghasdfghasdfghbb 3')
>>> 
>>> b = bytearray('1 first 2 second 3', 'utf-8')
>>> b
bytearray(b'1 first 2 second 3')
>>> 
>>> replace(b, ((2, 7), (10, 16)), b'abc')
>>> b
bytearray(b'1 abc 2 abc 3')
>>>



Отредактировано py.user.next (Апрель 14, 2022 23:33:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version