Нормальная реализация RLE на python
В интернете очень много плохих реализаций RLE, которые не используют наглядность. Пусть еще одна будет, присутствует кодер и декодер. Используется в качестве простого архиватора. Ближе к делу, начитаться про работу вы на других ресурсах успели.
Кодер RLE (encoder)
def nullRLE(sequense):
out = []
countPars = -1
lastChar = sequense[0] # 0
for x in sequense:
if x == lastChar:
countPars += 1
else:
out.append(lastChar)
out.append(countPars)
countPars = 0
lastChar = x
out.append(lastChar)
out.append(countPars)
return out
sequence = [0, 1, 0, 0, 2, 0, 0, 0]
print("Выход:", nullRLE(sequence))
Выход: [0, 0, 1, 0, 0, 1, 2, 0, 0, 2]
Декодер RLE (decoder)
def decodeRLE(encoded_sequence):
decoded = []
for i in range(0, len(encoded_sequence), 2):
char = encoded_sequence[i]
count = encoded_sequence[i + 1]
for _ in range(count + 1): # Добавляем (count + 1) раз текущий символ
decoded.append(char)
return decoded
# Пример использования
encoded_sequence = [0, 0, 1, 0, 0, 1, 2, 0, 0, 2]
print("Декодированный выход:", decodeRLE(encoded_sequence))
Декодированный выход: [0, 1, 0, 0, 2, 0, 0, 0]