Usa groupby, esso elementi del gruppo di valore:
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])))
Ed ecco il codice in azione:
>>> 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>)
Da documentazione python:
L'operazione di groupby() è simile a al filtro uniq in Unix. Si genera una pausa o nuovo gruppo ogni volta che il valore della funzione chiave 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
Se si desidera anche l'indice della pista più lunga è possibile effettuare le seguenti operazioni:
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])
Sembra che si stia cercando la corsa più lunga nell'elenco; potresti voler modificare la tua domanda per renderla chiara. – las3rjock
Specificamente la corsa più lunga di ogni numero – Sparr
Sì Sparr che è corretto. C'è un modo per farlo, ma anche registrare l'indice in cui è iniziata la corsa più lunga? – hekevintran