On Dec 27, 11:34 am, Kugutsumen <[EMAIL PROTECTED]> wrote: > I am relatively new the python language and I am afraid to be missing > some clever construct or built-in way equivalent to my 'chunk' > generator below. > > def chunk(size, items): > """generate N items from a generator.""" > chunk = [] > count = 0 > while True: > try: > item = items.next() > count += 1 > except StopIteration: > yield chunk > break > chunk.append(item) > if not (count % size): > yield chunk > chunk = [] > count = 0
The itertools module is always a good place to look when you've got a complicated generator. import itertools import operator def chunk(N, items): "Group items in chunks of N" def clump((n, _)): return n // N for _, group in itertools.groupby(enumerate(items), clump): yield itertools.imap(operator.itemgetter(1), group) for ch in chunk(7, range(30)): print list(ch) I've changed chunk to return a generator rather than building a list which is probably only going to be iterated over. But if you prefer the list version, replace 'itertools.imap' with 'map'. -- Paul Hankin -- http://mail.python.org/mailman/listinfo/python-list