如何在Python中将列表拆分成指定数量的子列表
可能的重复问题:
将任意大小的列表大致分成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