Рассмотрим "строку" (обрабатывать ее как массив цифр)
0 0 1 8 8 8 1 0
RLE ("groupby"):
[(0,2), (1, 1), (8,3), (1, 1), (0, 1)]
Затем мы обогащаем вышеуказанную RLE суммой длин серий предыдущих элементов.
Следовательно, обогащенная версия вышеприведенного становится:
[(0, (0,2)), (0+2, (1, 1)), (0+2+1, (8,3)), (0+1+2+3, (1, 1)), (0+1+2+3+1, (0, 1))]
«Строка» разделена на 1:
0 0 , 8 8 8 , 0
RLE разделить на 1
[(0,2)] , [(8,3)] , [(0, 1)]
«Строка» разделена на 8:
0 0 1 , , , 1 0
RLE разделено на 8
[(0,2), (1, 1)] , , , [(1, 1), (0, 1)]
Примечание. В моих примерах я привел списки "RLE split on Z" без их обогащения. Это не было бы так. Я оставил их, чтобы уменьшить беспорядок. Например, «RLE split on 1» действительно должно рассматриваться как:
[(0, (0,2))] , [(0+2+1, (8,3))] , [(0+1+2+3+1, (0, 1)]
Как я могу добиться этого "разделения RLE" на Z (= 1, 8; в этом случае)
Нельзя оставлять пустые массивы (после разбиения).
Возможно, умный список комп.? (кажется немного проще решить с помощью цикла for с вложенным вложением)