группировщик с последовательностью размера блока в python?

У меня есть генератор, который я хочу перебрать на двух уровнях. Первый уровень неравномерно распределен, затем я хочу разбить следующий уровень, скажем, на группы по 5 человек. Мне нужно, чтобы он эффективно использовал память и работал с входами генератора, поэтому я делаю что-то вроде следующего. Я должен подумать, что может быть способ получше? В частности, мне не нужны завершающие Nones в результатах с неравномерной длиной.

import itertools

def dynamic_grouper(iterable, intervals):
    for i in intervals:
        inner_iter = list(itertools.islice(iterable, i)) # this is a "group"
        yield inner_iter

iterable = iter(xrange(100))
chunk_sizes = [22,30,38,10]

for i,group in enumerate(dynamic_grouper(iterable, chunk_sizes)):
    args = [iter(group)] * 5
    for item in itertools.izip_longest(fillvalue=None, *args):
        print "Group %i" % i
        print "Items %s" % list(item)
6
задан jseabold 24 February 2012 в 16:20
поделиться