В itertools groupby нет значений - python

Я пытаюсь сгруппировать значения в строке с помощью python - itertools.groupby. Я пробовал использовать этот код:

for key,values in itertools.groupby(s):
    print(key,list(values))

И я получаю такой вывод:

a ['a']
b ['b']
a ['a', 'a']
b ['b', 'b', 'b']
c ['c']

что нормально. Но когда я добавляю условие if и меняю код таким образом:

out = ''
for key,values in itertools.groupby(s):
    if len(list(values))==1:
        out+=key
    else:
        out += key
        out += str(len(list(values)))
    print(key,list(values))

Я получаю такой вывод:

a []
b []
a []
b []
c []

Я не знаю, почему списки пустые


person SAI SANTOSH CHIRAG    schedule 23.03.2021    source источник
comment
потому что здесь используется итератор: len(list(values))   -  person juanpa.arrivillaga    schedule 23.03.2021
comment
Извините, я не поняла. @ juanpa.arrivillaga   -  person SAI SANTOSH CHIRAG    schedule 23.03.2021


Ответы (1)


values - итератор, вы можете вызвать list() только один раз, прежде чем он будет использован. Вы должны сохранить этот результат в переменной и использовать его повторно.

out = ''
for key,values in itertools.groupby(s):
    value_list = list(values)  # values iterator exhausted here, can't use it again
    if len(value_list)==1:
        out+=key
    else:
        out += key
        out += str(len(value_list))
    print(key,value_list)
person rdas    schedule 23.03.2021