użytkowania groupby, IT Group elementy według wartości:
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])))
A oto kod w akcji:
>>> 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>)
Z dokumentacji Pythona:
Operacja of groupby() jest podobny do filtra uniq w systemie Unix. To generuje przerwę lub nową grupę każdy czasu wartość funkcji klucza zmienia
# [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
Jeśli chcesz także indeks najdłuższego biegu można wykonać następujące czynności:
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])
Wygląda na to, że szukasz najdłuższego przebiegu na liście; możesz edytować swoje pytanie, aby to wyjaśnić. – las3rjock
W szczególności najdłuższy bieg każdego numeru – Sparr
Tak Sparr jest poprawny. Czy istnieje sposób, aby to zrobić, ale także zarejestrować indeks, od którego rozpoczyna się najdłuższy bieg? – hekevintran