控制发电机的迭代范围?

时间:2016-01-27 15:32:44

标签: python

有没有办法可以控制python生成器对象的迭代范围?

示例:假设一个生成器包含2000个项目,我希望一个循环从1到100迭代,另一个循环从101到200,依此类推。

简单的for item in generator循环只会耗尽生成器

1 个答案:

答案 0 :(得分:2)

itertools.islice(generator, start, stop, step)是你想要使用的。

例如:

def generator():
  n = 1
  while n:
    yield n
    n += 1

items = generator()
for item in itertools.islice(items, 100):
  print ('first', item)
for item in itertools.islice(items, 100):
  print ('second', item)

编辑:上面当然只允许你每次拿100。如果你知道你的生成器是有限的,我会把它变成一个列表,然后迭代它的范围。然后你可以有任意和重叠的范围。