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对象不是迭代器