j'ai une liste comme suit:python: déterminer la longueur de la séquence d'éléments égaux dans la liste
l = [0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,2,2,2]
je souhaite déterminer la longueur d'une séquence d'éléments identiques, à savoir pour la liste donnée je veux la sortie être:
[(0, 6), (1, 6), (0, 4), (2, 3)]
(ou un format similaire).
J'ai pensé à utiliser un defaultdict
mais il compte les occurrences de chaque élément et l'accumule pour la liste entière, puisque je ne peux pas avoir plus d'une clé '0'.
En ce moment, ma solution ressemble à ceci:
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
Je me demande s'il y a un moyen plus pythonique de le faire.
Vous pourriez accélérer la clause 'else:' en remplaçant ce qui est montré par les deux lignes suivantes: 'pour i, _ dans enumerate (l, 1): pass' suivi de' return i'. – martineau