Очень часто писать цикл и помнить предыдущий.Вычитание текущего и предыдущего элементов в списке
Я хочу генератор, который делает это для меня. Что-то вроде:
import operator
def foo(it):
it = iter(it)
f = it.next()
for s in it:
yield f, s
f = s
Теперь вычтите по пару.
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
Выходы:
[(0, 3), (3, 4), (4, 10), (10, 2), (2, 3)]
[3, 1, 6, -8, 1]
[3, 1, 6, -8, 1]
- Что такое хорошее название для этой операции?
- Что такое лучший способ написать это?
- Есть ли встроенная функция, которая делает что-то подобное?
- Попытка использовать «карту» не упростила ее. Что значит?
список понимание уже тривиально просто, и это очевидно, и естественный способ сделать это. Переход от этого к гораздо более неясному «карте» предполагает, что вы слишком задумываетесь об этом. Функция генератора также проста и проста. –
это похоже на http://en.wikipedia.org/wiki/Bigram, aka ngram, когда n равно 2 – sunqiang