Es muy común escribir un ciclo y recordar el anterior.Restando el elemento actual y anterior en una lista
Quiero un generador que lo haga por mí. Algo como:
import operator
def foo(it):
it = iter(it)
f = it.next()
for s in it:
yield f, s
f = s
Resta ahora por pares.
L = [0, 3, 4, 10, 2, 3]
print list(foo(L))
print [x[1] - x[0] for x in foo(L)]
print map(lambda x: -operator.sub(*x), foo(L)) # SAME
Salidas:
[(0, 3), (3, 4), (4, 10), (10, 2), (2, 3)]
[3, 1, 6, -8, 1]
[3, 1, 6, -8, 1]
- ¿Qué es un buen nombre para esta operación?
- ¿Cuál es la mejor manera de escribir esto?
- ¿Hay una función incorporada que hace algo similar?
- Intentar usar 'mapa' no lo simplificó. ¿Que hace?
La lista por comprensión ya es trivialmente simple, y es la manera obvia y natural de hacer esto. Pasar de eso al "mapa" mucho más oscuro sugiere que estás pensando demasiado en esto. La función del generador también es simple y directa. –
se ve como http://en.wikipedia.org/wiki/Bigram, también conocido como ngram cuando n es 2 – sunqiang