2016-12-05 65 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]