Упаковка повторяющихся подряд символов во вложенные списки (python3)

Нужно что бы программа принимающая символы на ввод, например:

w w w o r l d g g g g r e a t t e c c h e m g g p w w w z a z

выводила список следующего вида:

[['w', 'w', 'w'], ['o'], ['r'], ['l'], ['d'], ['g', 'g', 'g', 'g'], ['r'], ['e'], ['a'], ['t', 't'], ['e'], ['c', 'c'], ['h'], ['e'], ['m'], ['g', 'g'], ['p'], ['w', 'w', 'w'], ['z'], ['a'], ['z']]

Что нужно исправить в коде ниже что бы он работал так, как описано выше?

def list_for_copied_letters(text):
    list_for_print = []
    list_letters = []
    for letters in range(1, len(text)):
        if text[letters] == text[letters - 1]:
            list_letters.extend(text[letters - 1])
        else:
            list_for_print.append(list_letters)
            list_letters = []
    print(list_for_print)

list_for_copied_letters((input() + " *").split(" "))

Спасибо!


Ответы (4 шт):

Автор решения: pankazimierz
def list_for_copied_letters(text):
    list_for_print = []
    list_letters = []
    for letters in range(len(text) - 1):
        if text[letters] != text[letters + 1]:
            list_letters.append(text[letters])
            list_for_print.append(list_letters)
            list_letters = []
        else:
            list_letters.append(text[letters])
    print(list_for_print)


list_for_copied_letters((input() + " *").split(" "))
→ Ссылка
Автор решения: TigerTV.ru

Можно так:

from itertools import groupby

text = "wwworldggggreattecchemggpwwwzaz"
res = [list(g) for k, g in groupby(text)]
print(res)

Вывод:

[['w', 'w', 'w'], ['o'], ['r'], ['l'], ['d'], ['g', 'g', 'g', 'g'], ['r'], ['e'], ['a'], ['t', 't'], ['e'], ['c', 'c'], ['h'], ['e'], ['m'], ['g', 'g'], ['p'], ['w', 'w', 'w'], ['z'], ['a'], ['z']]
→ Ссылка
Автор решения: Andy Pavlov

Можно сделать и через регулярные выражения

import re
text = 'wwworldggggreattecchemggpwwwzaz'

pattern = re.compile(r'(.)\1*')
print([list(p.group()) for p in pattern.finditer(text)])

Вывод

[['w', 'w', 'w'], ['o'], ['r'], ['l'], ['d'], ['g', 'g', 'g', 'g'], ['r'], ['e'], ['a'], ['t', 't'], ['e'], ['c', 'c'], ['h'], ['e'], ['m'], ['g', 'g'], ['p'], ['w', 'w', 'w'], ['z'], ['a'], ['z']]
→ Ссылка
Автор решения: flurry_pa

Решение в духе основной логики автора. Реализация проще без использования range:

def list_for_copied_letters(text):
    list_for_print = []
    list_letters = []

    for i, character in enumerate(text):
        
        if character in list_letters or len(list_letters) == 0:
            list_letters.append(character)
        else:
            list_for_print.append(list_letters)
            list_letters = [character]

        if i == len(text) - 1:
            list_for_print.append(list_letters)

    return list_for_print


string = 'wwworldggggreattecchemggpwwwzaz'
print(list_for_copied_letters(text=string))
→ Ссылка