Python for loop, ¿cómo encontrar el siguiente valor (objeto)?

Hola, estoy tratando de usar el bucle para encontrar la diferencia entre cada dos objetos por menos entre sí. Entonces, ¿cómo puedo encontrar el siguiente valor en un bucle for?

for entry in entries: first = entry # Present value last = ?????? # The last value how to say? diff = last = first 

Cabe señalar que ninguna de estas soluciones funciona para generadores. Para eso ver la solución superior de Glenn Maynards.

usa zip para pequeñas listas:

  for current, last in zip(entries[1:], entries): diff = current - last 

Esto hace una copia de la lista (y una lista de tuplas de ambas copias de la lista) por lo que es bueno usar itertools para manejar listas más grandes

 import itertools as it items = it.izip(it.islice(entries, 1, None), entries) for current, last in items: diff = current - last 

Esto evitará tanto hacer una copia de la lista como hacer una lista de tuplas.

Otra forma de hacerlo sin hacer una copia es

 entry_iter = iter(entries) entry_iter.next() # Throw away the first version for i, entry in enumerate(entry_iter): diff = entry - entries[i] 

Y otra forma es:

 for i in xrange(len(entries) - 1): diff = entries[i+1] - entries[i] 

Esto crea un iterador que indexa las entries y las avanza en uno. A continuación, utiliza la enumerate para obtener un índice con el elemento. El índice comienza en 0 y, por lo tanto, apunta al elemento anterior porque tenemos un elemento en bucle.

Además, como Tyler señaló en el comentario, un bucle podría ser una exageración para un problema tan simple si solo quieres iterar sobre las diferencias.

 diffs = (current - last for current, last in it.izip(it.islice(entries, 1, None), entries)) 

zip funciona para listas, pero para el caso general:

 def pairs(it): it = iter(it) prev = next(it) for v in it: yield prev, v prev = v a = [1,2,3,4,5] for prev, cur in pairs(a): print cur - prev import itertools as it for prev, cur in pairs(it.cycle([1,2,3,4])): print cur - prev 

Esto funciona de manera eficiente para contenedores grandes y, lo que es más importante, funciona para iteradores:

 for prev, cur in pairs(open("/usr/share/dict/words").xreadlines()): print cur, prev, 

Edición: Cambié el generador para omitir el primer valor sin valor anterior, ya que se ajusta mejor a la pregunta original (“encontrar diferencias entre pares adyacentes”), y agregué un caso de ejemplo que muestra que funciona para un iterador que se repite infinitamente.

No sé exactamente qué es lo que estás buscando, pero quizás esto pueda ayudarte:

 first = entries[0] for entry in entries[1:]: last = entry diff = last - first first = entry 

muy simple, utilizando enumerar, no hay cosas de fantasía

 >>> entries=[10,20,30,40] >>> for n,i in enumerate(entries): ... try: ... print entries[n+1] - i ... except IndexError: ... print entries[-1] ... 10 10 10 40