Неравномерное разделение в питоне

Имея список размеров фрагментов, как бы вы разделили итерируемый объект на фрагменты переменной длины? Я пытаюсь уговорить itertools.islice пока безуспешно.

for chunk_size in chunk_list: 
   foo(iter, chunk_size)

person Emre    schedule 27.05.2014    source источник


Ответы (1)


Вам нужно сделать объект iter вашего итерируемого, чтобы вы могли вызвать islice для него с определенным размером и выбрать, где вы остановились на следующей итерации. Это идеальное использование функции генератора:

def uneven_chunker(iterable, chunk_list):
    group_maker = iter(iterable)
    for chunk_size in chunk_list:
        yield itertools.islice(group_maker, chunk_size)

Пример:

>>> iterable = 'the quick brown fox jumps over the lazy dog'
>>> chunk_size = [1, 2, 3, 4, 5, 6]
>>> for item in uneven_chunker(iterable, chunk_size):
...     print ''.join(item)
...
t
he
 qu
ick
brown
 fox j
person mhlester    schedule 27.05.2014