что делать с ,буквой, которая встречается один раз при декодировании RLE
Есть функция для декодирования, но она работает только с такими строками A15B1A5
def run_length_decoding(compressed_seq):
seq = ''
for i in range(0, len(compressed_seq)):
if compressed_seq[i].isalpha():
for j in range(int(compressed_seq[i + 1])):
seq += compressed_seq[i]
return (seq)
Мне нужно, чтобы она работала с такими: A15BA5, где после буквы, встречающейся один раз нет цифры 1
с условиями не получается:
...
if compressed_seq[i].isalpha() and compressed_seq[i+1].isdigit():
for j in range(int(compressed_seq[i + 1])):
seq += compressed_seq[i]
elif (compressed_seq[i].isalpha() and compressed_seq[i+1].isalpha()):
seq += compressed_seq[i]
...
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Ваша функция даже А15 неправильно декодирует (будет только одна А а пятёрка уйдёт в небытие). Так что я не стал исправлять вашу и написал другую:
import re
def run_length_decoding(compressed_seq):
return ''.join(symb*int(n) if n else symb for symb,n in re.findall(r'(.)(\d+)?', compressed_seq))
Или та же функция, если расписать её в вашем (более классическом многострочном) стиле:
def run_length_decoding(compressed_seq):
seq = ''
for symb,n in re.findall(r'(.)(\d+)?', compressed_seq):
if n:
for j in range(int(n)): # вообще-то весь этот цикл можно заменить строчкой: seq += symb*int(n)
seq += symb
else:
seq += symb
return seq