Qual é a maneira mais pitônica de identificar duplicatas consecutivas em uma list

Eu tenho uma lista de números inteiros e quero ser capaz de identificar blocos contíguos de duplicatas: ou seja, eu quero produzir uma lista de preservadores de pedidos de pares onde cada um deles contém (int_in_question, número de ocorrências

Por exemplo, se eu tiver uma lista como:

[0, 0, 0, 3, 3, 2, 5, 2, 6, 6]

Eu quero que o resultado seja:

[(0, 3), (3, 2), (2, 1), (5, 1), (2, 1), (6, 2)]

Eu tenho umbastant maneira simples de fazer isso com um loop for, temp e um contador:

result_list = []
current = source_list[0]
count = 0
for value in source_list:
    if value == current:
        count += 1
    else:
        result_list.append((current, count))
        current = value
        count = 1
result_list.append((current, count))

Mas eu realmente gosto dos idiomas de programação funcional do python, e gostaria de poder fazer isso com uma expressão simples de gerador. No entanto, acho difícil manter subcontagens ao trabalhar com geradores. Sinto que um processo de duas etapas pode me levar até lá, mas por enquanto estou perplex

Existe uma maneira particularmente elegante / pitônica de fazer isso, especialmente com geradore

questionAnswers(1)

yourAnswerToTheQuestion