python中使用生成器按n个元素循环

python中使用生成器按n个元素循环,python,python-2.7,Python,Python 2.7,通过列表,我可以做如下事情: lst = [1, 2, 3, 4] assert len(lst) % 2 == 0 # I know that source has n % 2 == 0 elements for i in range(0, len(lst), 2): print lst[i] + lst[i+1] 如果lst是生成器,如何实现相同的行为?我知道它可以不消耗发电机的“长度” 现在我完成了下面的代码: for l in gen: r = next(gen) prin

通过列表,我可以做如下事情:

lst = [1, 2, 3, 4]
assert len(lst) % 2 == 0 # I know that source has n % 2 == 0 elements
for i in range(0, len(lst), 2):
  print lst[i] + lst[i+1]
如果
lst
是生成器,如何实现相同的行为?我知道它可以不消耗发电机的“长度”

现在我完成了下面的代码:

for l in gen:
  r = next(gen)
  print l + r

但它不适用于n-case

您可以执行以下操作:

In [103]: def lst():
    i = 1
    while i <= 10:
        yield i
        i += 1

In [104]: g = lst()

In [105]: while True:
    try:
        v1, v2 = next(g), next(g)
        print(v1,v2)
    except StopIteration:
        break
   .....:     
(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, 10)
[103]中的
:def lst():
i=1

而我你可以这样做:

In [103]: def lst():
    i = 1
    while i <= 10:
        yield i
        i += 1

In [104]: g = lst()

In [105]: while True:
    try:
        v1, v2 = next(g), next(g)
        print(v1,v2)
    except StopIteration:
        break
   .....:     
(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, 10)
[103]中的
:def lst():
i=1
当我使用xnx回复中的lst()函数创建生成器时:

def lst():
    i = 1
    while i <= 10:
        yield i
        i += 1
gen = lst()
使用xnx回复中的lst()函数创建生成器:

def lst():
    i = 1
    while i <= 10:
        yield i
        i += 1
gen = lst()

循环使用
next()
获取下一项。虽然您无法在不实际使用它的情况下执行
len()%2==0
。在到达末尾之前,您将无法确定是否有偶数,但如果您搜索“成对使用迭代器”,我相信您会找到一些内容。使用
next()
循环它并获取下一项。虽然你无法在不实际使用它的情况下执行
len()%2==0
。在你到达末尾之前,你无法找出是否有偶数,但是如果你搜索“成对使用迭代器”,我肯定你会找到一些东西。你可以使用
lst=xrange(1,10)
@khrandziuk,你实际上无法
TypeError:xrange对象不是迭代器
您可以使用
lst=xrange(1,10)
@khrandziuk您实际上不能使用<代码>类型错误:xrange对象不是迭代器