4

アイテムのシーケンスと別のチャンク長のシーケンスが与えられた場合、シーケンスを必要な長さのチャンクに分割するにはどうすればよいですか?

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

理想的には、解決策は、リストだけでなく、一般的な iterable としても機能aします。l

4

2 に答える 2

16

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]]

また :

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]]
于 2012-11-16T11:39:06.647 に答える
0
def split_lengths(a,l):
    resultList = []
    index=0

    for length in l:
        resultList.append(a[index : index + length])
        index = index + length

    retun resultList
于 2012-12-31T11:14:50.363 に答える