リストを等しい長さに分割

Splitting an array in equal parts – StackOverflow

アレイ(numpy.ndarray)を等しい長さに分割と云えば,

import numpy as np


np.array_split([1, 2, 3, 4, 5, 6, 7], 3)
[array([1, 2, 3]), array([4, 5]), array([6, 7])]

ここでは,リストを等しい長さのサブリストに分割する事を考えたい.
まあ,やる事は一緒な訳だけども.

from itertools import accumulate


def array_split(lst, n=3):
    N = len(lst)
    v, m = divmod(N, n)
    p = [0] + m*[v+1] + (n-m)*[v]
    dp = list(accumulate(p))

    res = []
    for i in range(n):
        s, e = dp[i], dp[i+1]
        res.append(lst[s:e])
    return res


array_split([1, 2, 3, 4, 5, 6, 7])
[[1, 2, 3], [4, 5], [6, 7]]

間違えた.サブリストの長さか.

from itertools import accumulate


def array_split02(lst, l=3):
    N = len(lst)
    n = N // l + 1 if N % l else N // l

    v, m = divmod(N, n)
    p = [0] + m*[v+1] + (n-m)*[v]
    dp = list(accumulate(p))

    res = []
    for i in range(n):
        s, e = dp[i], dp[i+1]
        res.append(lst[s:e])
    return res


array_split02([1, 2, 3, 4, 5, 6, 7])
[[1, 2, 3], [4, 5], [6, 7]]
広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください