Поиск одинаковых символов идущих подряд (от 2 до 9)

Всем привет!
Написал функцию, которая проверяет наличие одинаковых цифр идущих подряд, и показывает количество таких блоков.
Выдаёт список с циферками которые показывают сколько блоков есть и по сколько повторений в каждом.
Но меня не оставляют мысли, что можно было сделать это аккуратнее и компактнее.

Подскажите есть какие то библиотеки, функции, регулярки для подобного рода задач?

def check_repeat_digits(55533):
    a = 0
    score = 0
    score_mass = []
    sid = str(id)
    for i in sid:
        try:
            # проверка среза есть ли в нём дубликаты and предотвращаем выход за границы
            if len(set(sid[a:a+2])) == 1 and a < len(sid)-1: если ОК то 
                score += 1
            # если блок одинаковых цифр прервался, заносим инфу в список, и обнуляемся
            elif score > 0:
                # +1 что бы корректно отображалось кол-во символов в блоке
                score_mass.append(score+1)
                score = 0
            else:
                a += 1
                continue
        except:
            exit()
        a += 1
    print(score_mass)

>>> [3, 2]

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

Автор решения: haskiindahouse

Вам возможно понравится класс Counter из стандартной библиотеки collection.
Более подробно с этим и другими полезными классами вы можете ознакомится по ссылке. Прикрепляю альтернативу вашей функции с использованием данного класса. Если что непонятно - пишите, прокомментирую. Единственное отличие что моя реализация выходит за ограничения с поиском одинаковых цифр от 2 до 9, но мне кажется, что рассмотрев более общий вариант куда легче написать частный с дополнительным условием.

def check_repeat_digits(number):
    print([val for key, val in Counter([int(i) for i in str(number)]).items()])
→ Ссылка
Автор решения: Zhihar

используйте регулярку

import re

res = re.findall(r"((\d)\2{1,})", "5551888337771234555")

print(res)

если вам надо искать не 2 и больше, а N и больше символов, то укажите кол-во символов в {1,}

(от 2 до 9)

будет означать {1,8}

т.е. ваш код будет выглядеть так:

import re

def check_repeat_digits(value):
    return [len(obj[0]) for obj in re.findall(r"((\d)\2{1,8})", str(value))]
→ Ссылка
Автор решения: Alex Titov

Для общей задачи группировки есть библиотечная функция. Ну для Вашей задачи можно еще отфильтровать группы с длиной 1

import itertools
print([(len(list(g[1])), g[0]) for g in itertools.groupby('5551888337771234555')])
→ Ссылка