mam listę w następujący sposób:Python: ustalić długość sekwencji równych elementów w liście
l = [0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,2,2,2]
Chcę ustalić długość sekwencji równych elementów, to znaczy do podanej listy Chcę wyjście być:
[(0, 6), (1, 6), (0, 4), (2, 3)]
(lub podobnym formatem).
Pomyślałem o użyciu defaultdict
, ale zlicza on wystąpienia każdego elementu i gromadzi go dla całej listy, ponieważ nie mogę mieć więcej niż jednego klucza "0".
Teraz moje rozwiązanie wygląda tak:
out = []
cnt = 0
last_x = l[0]
for x in l:
if x == last_x:
cnt += 1
else:
out.append((last_x, cnt))
cnt = 1
last_x = x
out.append((last_x, cnt))
print out
Zastanawiam się, czy istnieje bardziej pythonic sposób to zrobić.
Można nieco przyspieszyć klauzulę 'else:', zastępując to, co jest widoczne z następującymi dwoma liniami: 'dla i, _ w wyliczeniu (l, 1): pass', po którym następuje' return i'. – martineau