【问题标题】:How to split a list into a given number of sub-lists in python [duplicate]如何在python中将列表拆分为给定数量的子列表[重复]
【发布时间】:2011-01-15 04:26:30
【问题描述】:

可能的重复:
splitting a list of arbitrary size into only roughly N-equal parts
How do you split a list into evenly sized chunks in 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) 将返回一个包含两个元素的两个列表和一个元素的两个列表的列表。

我不在乎哪些元素出现在哪个列表中,只是列表尽可能均匀地划分。

【问题讨论】:

  • 我觉得这看起来很眼熟:stackoverflow.com/questions/2130016/…
  • 这个问题及其使用 zip 和 iter() 的“聪明答案”在过去 48 小时内出现了大约 5 次。搜索是您的朋友。
  • 搜索“python list chunks”,你会找到答案……投票以重复结束
  • 这个问题要求将序列分成指定数量的块,而不是指定长度的块。这不是一回事。

标签: python list


【解决方案1】:

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) 将返回包含两个元素的两个列表的列表 和一个元素的两个列表。

您可能希望为 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

【讨论】:

  • 真的很糟糕,不回答问题,也不行。
  • 我添加了一些示例以使答案更加清晰。公平地说,最初的问题不是很清楚,但我认为 numpy.split 可以满足 OP 的要求。至少 n=2 和 n=3 的示例似乎返回了与问题中相同的输出(除了输出是一个 numpy 数组而不是列表,但我假设这不是问题)跨度>
  • 问题询问“如何拆分列表”而不是 np 数组。但我还是把我的反对票改成了赞成票。
  • 前此作品:def split_list(alist, wanted_parts=1): length = len(alist) return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts] for i in range(wanted_parts) ]
  • np.array_split 具有相同的语法并避免ValueError 的可能性
猜你喜欢
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2018-05-26
相关资源
最近更新 更多