Шаг назад во время итерации

К примеру у меня есть код

l_iter = iter(l)
l_iter = iter(l)
for i in l_iter:
     if i == 1 and next(l_iter) == *любое значение*:
         *действие*

Так вот, уже при следующем i оно будет равно не 2, а 3 так как next(l_iter) перешло на следующий элемент. Можно как-то сделать шаг назад в итерации?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Давайте оттолкнёмся от задачи: нужно перебрать последовательные пары из списка (или любой последовательности). К сожалению, в стандартной библиотеке такой функциональности нет. Справимся сами:

def pairs(seq):
    it = iter(seq)
    try:
        prev = next(it)
    except StopIteration:
        return
    for item in it:
        yield prev, item
        prev = item

Тест:

> print(tuple(pairs([1, 2, 3, 4])))
[(1, 2), (2, 3), (3, 4)]

Теперь ваша задача решается просто:

l = [0, 1, 2, 3, 4, 1, 2, 1]
for i, j in pairs(l):
    if i == 1 and j == 2:
        print('found')
→ Ссылка