Как мне исправить эту модифицированную программу кодирования длины выполнения?

#python #function #itertools #run-length-encoding

#python #функция #python-itertools #кодирование длины выполнения

Вопрос:

Привет, я новичок в python, и мне нужна помощь

Для повторяющихся последовательных символов я хочу вернуть вложенный список, который представляет [len(x), x] (RLE). Я создал эту программу:

 import itertools
lst = [1, 1, 2, 3, 4, 4, 5, 1]
def function(lst):
    new = []
    for k, g in itertools.groupby(lst):
        if len(list(g)) > 1:
            new.append([len(list(g)), k])
        else:
            new.append(k)
    return new
print(function(lst))
  

Но, похоже, возвращается:

 [[0, 1], 2, 3, [0, 4], 5, 1]
  

Почему это происходит и как я могу это исправить?

Спасибо!

Комментарии:

1. g в вашем коде объект group является итератором. Вы исчерпываете ее при первом вызове list() . Вам нужно вычислить длину один раз и сохранить ее в переменной, если она вам понадобится более одного раза.

2. После того, как вы используете list(g) , вы исчерпали итератор g . Присвойте list(g) переменной перед ее использованием.

3. «g» содержит итератор, который исчерпывается после первого преобразования в список. Сохраните длину списка перед «if» и используйте ее дважды