How to iterate the input over a particular size?

Lie Ryan lie.1296 at gmail.com
Mon Dec 28 12:15:16 EST 2009


On 12/28/2009 8:54 PM, Peter Otten wrote:
> Francesco Bochicchio wrote:
> One with lazy chunks:
>
>>>> from itertools import chain, islice
>>>> def chunks(items, n):
> ....     items = iter(items)
> ....     for first in items:
> ....             yield chain((first,), islice(items, n-1))
> ....
>>>> [list(chunk) for chunk in chunks(range(10), 3)]
> [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]


better:
import itertools
def chunks(items, n):
     ctr = (x // n for x in itertools.count())
     return itertools.groupby(items, lambda _: next(ctr))

input_list = range(10)
list(list(x[1]) for x  in chunks(input_list, 3))
# [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]



More information about the Python-list mailing list