将列表拆分为不同长度的块

eca*_*mur 4 python iterator list

给定一系列项目和另一个块长度序列,如何将序列拆分为所需长度的块?

a = range(10)
l = [3, 5, 2]
split_lengths(a, l) == [[0, 1, 2], [3, 4, 5, 6, 7], [8, 9]]
Run Code Online (Sandbox Code Playgroud)

理想情况下,解决方案既适用于两者a,也适用l于一般的迭代,而不仅仅是列表.

Ash*_*ary 14

使用itertools.islice该列表的迭代器.

In [12]: a = range(10)

In [13]: b = iter(a)

In [14]: from itertools import islice

In [15]: l = [3, 5, 2]

In [16]: [list(islice(b, x)) for x in l]
Out[16]: [[0, 1, 2], [3, 4, 5, 6, 7], [8, 9]]
Run Code Online (Sandbox Code Playgroud)

要么 :

In [17]: b = iter(a)

In [18]: [[next(b) for _ in range(x)] for x in l]
Out[18]: [[0, 1, 2], [3, 4, 5, 6, 7], [8, 9]]
Run Code Online (Sandbox Code Playgroud)