如何将大小为 N 的列表尽可能均匀地分成 K 组

How do you split a list of Size N, into K groups as evenly as possible

之前也有人问过类似的问题,但是回答的是"how to split a list into evenly sized chunks"的问题,不是把一个list分成k组,尽量均匀:

这是我想要做的:

例如对于 N = 4,K = 3:
Return 3 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4

或 N = 6,且 K=4:
Return 4 个列表,以下元素来自 N
k1 = N1
k2 = N2
k3 = N3, N4
k4 = N5, N6

在 python 中可以表示为:

n = ["1","2","3","4","5","6"]
k = 4
print(solution(n,k))
$ ["1"]
$ ["2"]
$ ["3", "4"]
$ ["5", "6"]

一个例子是说我有 K=4 个处理器和 N = 6 个任务,我如何在处理器之间平均分配任务。

这是一个用 C 语言编写的类似问题:How to share work roughly evenly between processes in MPI despite the array_size not being cleanly divisible by the number of processes?

那里采用的方法是在 "processors" 中分配 int(N/K) 任务,并共享其余部分。

我想知道是否有 pythonic 方法可以做到这一点。

您可以使用 numpy.array_split

import numpy as np 

arr = range(6) 
np.array_split(arr, 4) 

>>[array([0, 1]), array([2, 3]), array([4]), array([5])]