2014-01-23 1 views
4

Это действительно основной вопрос синтаксиса, который я просто не знаю, как это сделать/не могу понять, как искать объяснение. В принципе, вы можете очень легко сравнить/вычислительными вещи между последовательными с точки зрения итератора, скажем, это:Обратитесь к смежному термину итерации Python в то время как в цикле for

for i in range(len(iterable)): 
    if iterable[i] == iterable[i + 1]: 
     do whatever 

но мне кажется, что там, безусловно, должен быть способ сделать это без возился с диапазоном (len()) вещь? как, я должен быть в состоянии иметь

for item in iterable: 
    if item == nextitem: 
     do whatever 

кроме того, что «nextitem» будет какая-то ключевое слово или синтаксис ломтика или ... Я не знаю, что было бы, я просто чувствую, он должен существовать. я думал, что for item, nextitem in iterable может работать, но это, похоже, относится только к кортежам INSIDE iterable. Что я здесь ищу?

ответ

5

Там не встроенный способ сделать это, но это работает:

from itertools import izip_longest 
for item, nextitem in izip_longest(iterable, iterable[1:]): 
    if item == nextitem: 
     do whatever better 

izip_longest docs

в зависимости от того, что ваш итерацию на самом деле, вы могли бы сделать zip(iterable[:-1], iterable[1:])

+0

я не думал о используя zip! все же кажется странным, что нечто более интуитивное не будет построено? но если это не так, это не так. вещь с застежкой-молнией будет работать, и она менее валовая, чем область (len()), которую я имел вначале; благодаря! – Skaramuche

+0

Я не понимаю жалобы. 'zip' - встроенная функция. –

+0

Да, но я не считаю метод, использующий zip, особенно интуитивным. кажется странным, что нечто более интуитивное, чем использование zip, не встроено. – Skaramuche