在python中不均匀的分块

时间:2014-05-27 20:43:03

标签: python iterable chunking

给定一个块大小列表,你如何将一个iterable分成可变长度的块?我试图哄骗itertools.islice但没有成功。

for chunk_size in chunk_list: 
   foo(iter, chunk_size)

1 个答案:

答案 0 :(得分:4)

您需要为您的iterable创建一个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