Dos funciones incorporadas que reemplazan el contador que sigues escribiendo a mano y la indexación que sigues equivocando. Una de las dos además tira datos a la basura sin avisarte.
Un bucle for son tres pasos que podrías escribir a mano. Una vez que los ves, el error de que algo salga vacío la segunda vez deja de ser una sorpresa y pasa a ser evidente.
Un generador es un iterador que escribes como una función normal. Se pausa en yield, retoma donde se quedó, y nunca construye la lista que estabas por construir.
El bucle que estás por escribir probablemente ya está en la biblioteca estándar. islice, chain, pairwise y groupby cubren casi todos, y groupby tiene una regla que no te puedes saltar.