itertools.islice不会在python3中推进迭代器

时间:2018-05-04 01:06:22

标签: python python-3.x

seq = 'abcdefghijklmn'

for i in itertools.islice(enumerate(seq), 2, 5):        
        print(i)

#(2, 'c')
#(3, 'd')
#(4, 'e')     

for i in itertools.islice(enumerate(seq), 3, 4):        
        print(i)


#(3, 'd')    

但是第二个for循环的预期结果应该是:

#(8, 'i')    

为什么第一次循环后枚举(seq)没有进展?

1 个答案:

答案 0 :(得分:3)

您每次都可以通过调用enumerate重新创建生成器。

如果您使用相同的生成器,它会按预期进行。

>>> import itertools
>>> seq = "abcdefghijklmnop"
>>> gen = enumerate(seq)
>>> list(itertools.islice(gen, 3))
[(0, 'a'), (1, 'b'), (2, 'c')]
>>> list(itertools.islice(gen, 3))
[(3, 'd'), (4, 'e'), (5, 'f')]
>>> list(itertools.islice(gen, 3))
[(6, 'g'), (7, 'h'), (8, 'i')]
>>> _