将 python 列表拆分为 4 个尽可能均匀的子列表
Splitting a python list into 4 sub-lists that are as even as possible
我正在尝试将 python 列表分成尽可能均匀的四个组,例如,如果原始列表是 [1, 2, 3, 4, 5, 6, 7, 8]
,那么生成的四个子列表将是 [1, 5] [2,6] [3,7] [4,8]
,其中代码遍历原始列表中的每个数字并将它们分配给不同的组,一旦到达第 4 组,它就会返回分配给第 1 组。
如果原始列表是 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
那么生成的四组应该是 [1,5,9] [2,6,10] [3,7] [4,8]
其中两个组有 3 个项目,另外两个组有 2 个项目——使组均匀可能。
知道如何实现吗?
试试这个,它以您想要的循环方式将输入列表拆分为子列表:
def round_robin_sublists(l, n=4):
lists = [[] for _ in range(n)]
i = 0
for elem in l:
lists[i].append(elem)
i = (i + 1) % n
return lists
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sublist = round_robin_sublists(l) # [[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]
>>> [a[i::4] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]
我正在尝试将 python 列表分成尽可能均匀的四个组,例如,如果原始列表是 [1, 2, 3, 4, 5, 6, 7, 8]
,那么生成的四个子列表将是 [1, 5] [2,6] [3,7] [4,8]
,其中代码遍历原始列表中的每个数字并将它们分配给不同的组,一旦到达第 4 组,它就会返回分配给第 1 组。
如果原始列表是 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
那么生成的四组应该是 [1,5,9] [2,6,10] [3,7] [4,8]
其中两个组有 3 个项目,另外两个组有 2 个项目——使组均匀可能。
知道如何实现吗?
试试这个,它以您想要的循环方式将输入列表拆分为子列表:
def round_robin_sublists(l, n=4):
lists = [[] for _ in range(n)]
i = 0
for elem in l:
lists[i].append(elem)
i = (i + 1) % n
return lists
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sublist = round_robin_sublists(l) # [[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]
>>> [a[i::4] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]