Самый пифонический способ получить предыдущий элемент

Я бы хотел, чтобы на итераторах был enumerate нумерованный функционал, который дает пару (previous_element, current_element) . То есть, учитывая, что iter

 i0, i1, i1, ... 

Я бы хотел, чтобы offset(iter) давало

 (None, i0), (i0, i1), (i1, i2) ... 

5 Solutions collect form web for “Самый пифонический способ получить предыдущий элемент”

Как насчет простого (очевидного) решения?

 def offset(iterable): prev = None for elem in iterable: yield prev, elem prev = elem 

Чтобы добавить больше itertools на стол:

 from itertools import tee, izip, chain def tee_zip(iterable): a, b = tee(iterable) return izip(chain([None], a), b) 
 def pairwise(iterable): """s -> (s0,s1), (s1,s2), (s2, s3), ... see http://docs.python.org/library/itertools.html """ a, b = itertools.tee(iterable) b.next() return itertools.izip(a, b) 

EDIT переместил строку doc в функцию

 def offset(iter, n=1, pad=None): i1, i2 = itertools.tee(iter) i1_padded = itertools.chain(itertools.repeat(pad, n), i1) return itertools.izip(i1_padded, i2) 

@bpgergo + @ user792036 = это. Лучший из двух миров :).

Лучший ответ, который у меня есть (и для этого требуется itertools ), является

 def offset(iter, n=1): # returns tuples (None, iter0), (iter0, iter1), (iter1, iter2) ... previous = chain([None] * n, iter) return izip(previous, iter) 

но мне было бы интересно узнать, есть ли у кого-то однострочный (или лучшее имя, чем смещение для этой функции)!

  • Нужно добавить элемент в начале итератора в python
  • python произвольно увеличивает итератор внутри цикла
  • Понимание повторяющихся типов в сравнении
  • Реализация итератора дерева глубины в Python
  • Как сгенерировать все возможные строки в python?
  • Python эквивалент zip для словарей
  • Как проверить, является ли объект итератором в Python?
  • Итератор файла Python по двоичному файлу с более новой идиомой
  • «Отсортированный 1-й итератор» на основе «2-й итератор» (декартово произведение итераторов)
  • Итерации по строкам строки
  • Класс Python, доступный итератором и индексом
  • Python - лучший язык программирования в мире.