给定一个块大小列表,你如何将一个iterable分成可变长度的块?我试图哄骗itertools.islice
但没有成功。
for chunk_size in chunk_list:
foo(iter, chunk_size)
答案 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