如何在Python中将列表拆分成指定数量的子列表

10 投票
1 回答
36700 浏览
提问于 2025-04-15 19:06

可能的重复问题:
将任意大小的列表大致分成N个相等部分
如何在Python中将列表分成大小相等的块?

我需要写一个函数,把一个列表分成多个子列表,每个子列表里的元素数量尽量相等。

比如:

def split_lists(mainlist, splitcount):
    ....


mylist = [1,2,3,4,5,6]

split_list(mylist,2) 会返回一个包含两个子列表的列表,每个子列表有三个元素 - [[1,2,3][4,5,6]]

split_list(mylist,3) 会返回一个包含三个子列表的列表,每个子列表有两个元素。

split_list(mylist,4) 会返回一个包含两个子列表,每个有两个元素,还有两个子列表,每个有一个元素。

我不在乎哪些元素在什么子列表里,只要尽量把列表分得均匀就行。

1 个回答

9

numpy.split 已经可以做到这一点:

举个例子:

>>> mylist = np.array([1,2,3,4,5,6])

如果你用 split_list(mylist,2),它会返回一个包含两个列表的列表,每个列表有三个元素 - [[1,2,3][4,5,6]]。

>>> np.split(mylist, 2)
[array([1, 2, 3]), array([4, 5, 6])]

如果你用 split_list(mylist,3),它会返回一个包含三个列表的列表,每个列表有两个元素。

>>> np.split(mylist, 3)
[array([1, 2]), array([3, 4]), array([5, 6])]

如果你用 split_list(mylist,4),它会返回一个包含两个列表的列表,每个列表有两个元素,还有两个列表各有一个元素。

你可能还想加一个异常捕获,以处理当 mylist 的长度除以 n 不是 0 的情况:

>>> np.split(mylist, 4)
ValueErrorTraceback (most recent call last)
----> 1 np.split(mylist, 4)
...
ValueError: array split does not result in an equal division

撰写回答