如何在python中将列表拆分为给定数量的子列表

Ric*_*ard 5 python list

可能的重复:
将任意大小的列表拆分为大致N等于的部分
如何在Python中将列表拆分为大小均匀的块?

我需要创建一个函数,将列表拆分为列表列表,每个列表包含相同数量的项目(或尽可能相等).

例如

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


mylist = [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

split_list(mylist,2)将返回两个包含三个元素的列表的列表 - [[1,2,3][4,5,6]].

split_list(mylist,3) 将返回包含两个元素的三个列表的列表.

split_list(mylist,4) 将返回两个元素列表和两个元素列表的列表.

我不关心哪个元素出现在哪个列表中,只是列表尽可能均匀地划分.

dal*_*ogm 9

numpy.split 已经这样做了:

例子:

>>> mylist = np.array([1,2,3,4,5,6])
Run Code Online (Sandbox Code Playgroud)

split_list(mylist,2) 将返回三个元素的两个列表的列表 - [[1,2,3][4,5,6]]。

>>> np.split(mylist, 2)
[array([1, 2, 3]), array([4, 5, 6])]
Run Code Online (Sandbox Code Playgroud)

split_list(mylist,3) 将返回包含两个元素的三个列表的列表。

>>> np.split(mylist, 3)
[array([1, 2]), array([3, 4]), array([5, 6])]
Run Code Online (Sandbox Code Playgroud)

split_list(mylist,4) 将返回一个列表,其中包含两个包含两个元素的列表和两个包含一个元素的列表。

您可能想要为 length(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
Run Code Online (Sandbox Code Playgroud)

  • 例如,这有效: `def split_list(alist, Wanted_pa​​rts=1): length = len(alist) return [ alist[i*length // Wanted_pa​​rts: (i+1)*length // Wanted_pa​​rts] for i in range(wanted_pa​​rts )]` (4认同)
  • `np.array_split` 具有相同的语法并避免了 `ValueError` 的可能性 (4认同)
  • 真的很糟糕,没有回答问题,也不起作用。 (3认同)