たくさん寝太郎の寝床

料理とITと皿回しが好きなオタクのブログ

リストを要素数の異なるサブリストに分割する話

こんにちは、たくさん寝太郎です。

素数が同じサブリストに分割する方法は調べるとすぐ出てきますが、要素数が異なるものの分割方法はあまり出てこなかったので考えてみました。

やりたいこと

以下のようにリストL,Gを与える。

L = [1,2,3,4,5,6,7,8]
G = [2,3,2,1]

この時、ある関数fを作用させる事で以下のような出力を得たいとします。

f(L,G) = [[1,2],[3,4,5],[6,7],[8]]

サブリストの要素数が同じ場合

例えば要素数が2のサブリストに分割したい場合は以下のように書く事で実行できます。

[L[idx:idx+2] for idx in range(0,len(L),2)]

->

[[0, 1], [2, 3], [4, 5], [6, 7]]

(参考: リストをN分割する | Python学習講座 )


サブリストの要素数が異なる場合

以下のように実装しました。

def split_list(L,G):
    A = [[]]*len(G)
    f = 0
    for idx, g in enumerate(G):
        A[idx] = L[f:f+g]
        f += g

    return A

split_list(L,G)
->
[[1,2],[3,4,5],[6,7],[8]]

素数が異なるサブリストに分割する事ができました。


おわり