#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» и используйте ее дважды