Skip to main content
 首页 » 编程设计

python之来自 itertools.cycle 生成器的列表理解

2025年05月04日9tuyile006

我的问题是我需要以列表形式从 itertools.cycle 生成器交付批处理。

A cycle接受一个可迭代对象并无限期地围绕自身循环。例如:

>>> my_cycle = itertools.cycle('abc') 
>>> next(my_cycle) 
'a' 
>>> next(my_cycle) 
'b' 
>>> next(my_cycle) 
'c' 
>>> next(my_cycle) 
'a' 

等等。

问题就变成了,我们如何从循环生成器中传递批处理长度 n 的列表,同时保留我们在循环中的位置?

期望的输出是:

c = itertools.cycle('abc') 
batch_size = 2 
Out[0]: ['a', 'b'] 
Out[1]: ['c', 'a'] 
Out[2]: ['b', 'c'] 

我会发布我的解决方案,以防有人遇到同样的问题。

请您参考如下方法:

好像islice是为此而生的:

>>> from itertools import cycle, islice 
>>> size_of_batch = 5 
>>> c = cycle('abcdefg') 
>>> list(islice(c, size_of_batch)) 
['a', 'b', 'c', 'd', 'e'] 
>>> list(islice(c, size_of_batch)) 
['f', 'g', 'a', 'b', 'c']