首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列表切分为子列表的列表

将列表切分为子列表的列表
EN

Stack Overflow用户
提问于 2010-02-10 03:01:14
回答 4查看 56.9K关注 0票数 38

对于任意长度的子列表,将列表分成分片的子列表部分的列表的最简单且相当有效的方法是什么?

例如,如果我们的源列表是:

代码语言:javascript
运行
复制
input = [1, 2, 3, 4, 5, 6, 7, 8, 9, ... ]

并且我们的子列表长度是3,那么我们寻找:

代码语言:javascript
运行
复制
output = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ... ]

同样,如果我们的子列表长度是4,那么我们寻找:

代码语言:javascript
运行
复制
output = [ [1, 2, 3, 4], [5, 6, 7, 8], ... ]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-10 03:04:02

代码语言:javascript
运行
复制
[input[i:i+n] for i in range(0, len(input), n)]        # Use xrange in py2k

其中n是块的长度。

由于您没有定义当input中的元素数量不能被n整除时,新列表的最后一个元素会发生什么,因此我假设它并不重要:例如,如果n等于7,那么您将获得等于2的最后一个元素。

票数 92
EN

Stack Overflow用户

发布于 2010-02-10 03:07:12

itertools模块的文档包含以下recipe

代码语言:javascript
运行
复制
import itertools

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

此函数返回所需长度的元组的迭代器:

代码语言:javascript
运行
复制
>>> list(grouper(2, [1,2,3,4,5,6,7]))
[(1, 2), (3, 4), (5, 6), (7, None)]
票数 16
EN

Stack Overflow用户

发布于 2014-04-01 04:39:05

一个真正的python变体(python 3):

代码语言:javascript
运行
复制
list(zip(*(iter([1,2,3,4,5,6,7,8,9]),)*3))

创建一个列表迭代器,并将其转换为具有3倍相同迭代器的元组,然后解压为zip并再次转换为列表。zip会从每个迭代器中提取一个值,但由于只有一个迭代器对象,所以所有三个迭代器的内部计数器都会全局递增。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2231663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档