Следует отметить, что нет из этих решений работают для генераторов.Для этого см. Превосходное решение Гленна Мейнарда.
используйте zip для небольших списков:
for current, last in zip(entries[1:], entries):
diff = current - last
Это создает копию списка (и список кортежей из обеих копий списка), поэтомухорошо использовать itertools для обработки больших списков
import itertools as it
items = it.izip(it.islice(entries, 1, None), entries)
for current, last in items:
diff = current - last
Это позволит избежать создания копии списка и создания списка кортежей.
Другой способсделать это без создания копии
entry_iter = iter(entries)
entry_iter.next() # Throw away the first version
for i, entry in enumerate(entry_iter):
diff = entry - entries[i]
И еще один способ:
for i in xrange(len(entries) - 1):
diff = entries[i+1] - entries[i]
Это создает итератор, который индексирует entries
и увеличивает его на единицу.Затем он использует enumerate
, чтобы получить индекс с предметом.Индекс начинается с 0 и, таким образом, указывает на предыдущий элемент, потому что мы включаем один элемент цикла.
Кроме того, как указал Тайлер в комментарии, цикл может быть излишним для такой простой проблемы, если вы просто хотитеперебрать различия.
diffs = (current - last for current, last in
it.izip(it.islice(entries, 1, None), entries))