У меня есть генератор, который я хочу перебрать на двух уровнях. Первый уровень расположен неравномерно, затем я хочу разделить следующий уровень на группы по 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)