Uso groupby, él elementos del grupo por valor:
from itertools import groupby
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
print max(group, key=lambda k: len(list(k[1])))
Y aquí está el código en acción:
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
>>> print max(group, key=lambda k: len(list(k[1])))
(2, <itertools._grouper object at 0xb779f1cc>)
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
>>> print max(group, key=lambda k: len(list(k[1])))
(3, <itertools._grouper object at 0xb7df95ec>)
De la documentación de Python:
La operación de groupby() es similar al filtro uniq en Unix. Se genera una ruptura o grupo nuevo cada vez el valor de la función de la tecla cambia
# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
Si también desea que el índice de la pista más larga, puede hacer lo siguiente:
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
result = []
index = 0
for k, g in group:
length = len(list(g))
result.append((k, length, index))
index += length
print max(result, key=lambda a:a[1])
Parece que está buscando la carrera más larga de la lista; Es posible que desee editar su pregunta para dejarlo en claro. – las3rjock
Específicamente la ejecución más larga de cada número – Sparr
Sí Sparr que es correcto. ¿Hay alguna manera de hacer esto pero también registrar el índice en el que comenzó la carrera más larga? – hekevintran