tengo una lista de la siguiente manera:Python: determinar la longitud de secuencia de elementos iguales en la lista
l = [0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,2,2,2]
quiero para determinar la longitud de una secuencia de elementos iguales, es decir, para la lista dada quiero la salida ser:
[(0, 6), (1, 6), (0, 4), (2, 3)]
(o un formato similar).
Pensé en usar un defaultdict
pero cuenta las ocurrencias de cada elemento y lo acumula para toda la lista, ya que no puedo tener más de una clave '0'.
En este momento, mi solución es similar a esto:
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
Me pregunto si hay una manera más Pythonic de hacer esto.
Puede acelerar un poco la cláusula 'else:' reemplazando lo que se muestra con las dos líneas siguientes: 'for i, _ en enumerate (l, 1): pass' seguido de' return i'. – martineau