Me gustaría recorrer una lista que compara cada elemento con el siguiente.
¿Hay alguna forma de recorrer todo menos el último elemento usando para x en y? Preferiría hacerlo sin usar índices si puedo.
Nota
freespace respondió mi pregunta real, por eso acepté la respuesta, pero SilentGhost respondió la pregunta que debería haber hecho.
Disculpas por la confusión.
y
es un generador?La forma más fácil de comparar el elemento de secuencia con lo siguiente:
fuente
Si desea obtener todos los elementos en la secuencia de pares sabios, utilice este enfoque (la función por pares es de los ejemplos en el módulo itertools).
Si necesita comparar el último valor con algún valor especial, encadene ese valor hasta el final
fuente
si quisieras comparar el enésimo elemento con n + 1º elemento en la lista, también podrías hacerlo con
tenga en cuenta que no hay codificación dura allí. Esto debería estar bien a menos que sientas lo contrario.
fuente
Para comparar cada elemento con el siguiente en un iterador sin crear una instancia de una lista:
fuente
Esto responde a lo que el OP debería haber preguntado , es decir, recorrer una lista que compara elementos consecutivos (excelente respuesta de SilentGhost ), pero generalizada para cualquier grupo ( n-gramo ): 2, 3, ...
n
:zip(*(l[start:] for start in range(0, n)))
Ejemplos:
Explicaciones:
l[start:]
genera una lista / generador a partir del índicestart
*list
o*generator
: pasa todos los elementos a la función de cierrezip
como si se hubiera escritozip(elem1, elem2, ...)
Nota:
AFAIK, este código es tan vago como puede ser. No probado.
fuente