2016-12-05 5 views
0

Я хочу получить доступ к перекрывающимся парам смежных значений в генераторе.Итерация через соседние пары в генераторе

Если бы это был список, я мог бы использовать

a = [5, 7, 11, 4, 5] 
for v, w in zip(a[:-1], a[1:]): 
    print [v, w] 

который с this question.

Но когда я пытаюсь сделать то же самое с генератором, я получаю ошибку

TypeError: 'generator' object is not subscriptable 

Есть ли способ сделать это для генераторов?

+0

Вы не можете использовать нарезку или индексацию к генераторам. Сначала вы должны принудить их к спискам. – DyZ

+0

Есть ли другой способ получить перекрывающиеся пары в генераторе без каких-либо нарезки или индексации? – Vermillion

+0

Почему вы не использовали верхний ответ из вопроса, который вы связали? Это то, что я написал в письме. – SethMMorton

ответ

4

Я хотел бы создать функцию генератора, чтобы сделать это: использование

def adjacent_pairs(it): 
    it = iter(it) 
    a, b = next(it), next(it) 
    while True: 
     yield a, b 
     a, b = b, next(it) 

Пример:

def gen(): 
    yield 5 
    yield 7 
    yield 11 
    yield 4 
    yield 5 
for v, w in adjacent_pairs(gen()): 
    print [v, w]