如何按n个元素对python中的元素进行分组[重复]

Posted

技术标签:

【中文标题】如何按n个元素对python中的元素进行分组[重复]【英文标题】:How to group elements in python by n elements [duplicate] 【发布时间】:2011-06-27 06:33:06 【问题描述】:

可能重复:How do you split a list into evenly sized chunks in Python?

我想从列表 l 中获取大小为 n 个元素的组:

即:

[1,2,3,4,5,6,7,8,9] -> [[1,2,3], [4,5,6],[7,8,9]] where n is 3

【问题讨论】:

复制:***.com/questions/312443/… 【参考方案1】:

好吧,蛮力的答案是:

subList = [theList[n:n+N] for n in range(0, len(theList), N)]

N 是组大小(在您的情况下为 3):

>>> theList = list(range(10))
>>> N = 3
>>> subList = [theList[n:n+N] for n in range(0, len(theList), N)]
>>> subList
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

如果你想要一个填充值,你可以在列表理解之前这样做:

tempList = theList + [fill] * N
subList = [tempList[n:n+N] for n in range(0, len(theList), N)]

例子:

>>> fill = 99
>>> tempList = theList + [fill] * N
>>> subList = [tempList[n:n+N] for n in range(0, len(theList), N)]
>>> subList
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 99, 99]]

【讨论】:

【参考方案2】:

您可以使用 itertools 文档中 recipes 中的 grouper 函数:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

【讨论】:

我认为这是最好的方法。但是,更有用的答案将链接到此处:***.com/questions/434287/…,因为它包含一些关于为什么这样做的讨论。【参考方案3】:

怎么样

a = range(1,10)
n = 3
out = [a[k:k+n] for k in range(0, len(a), n)]

【讨论】:

你测试过这个吗?我不认为[[1, 4, 7], [4], [7]] 是所需的输出。 删除[]操作中多余的:。这与我的第一部分的答案相同。【参考方案4】:

查看 itertools 文档底部的示例:http://docs.python.org/library/itertools.html?highlight=itertools#module-itertools

你想要“grouper”方法,或者类似的东西。

【讨论】:

【参考方案5】:
answer = [L[3*i:(3*i)+3] for i in range((len(L)/3) +1)]
if not answer[-1]:
    answer = answer[:-1]

【讨论】:

以上是关于如何按n个元素对python中的元素进行分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何按每个列表中的第四个元素对列表列表进行排序? [复制]

根据子列表中的第二个元素按字母顺序对列表进行排序,但不区分大小写[重复]

按列表列中的元素对 Pandas 数据框进行分组

如何按天、周、月对具有时间戳属性的对象进行分组?

python--pandas分组聚合

python将列表元素按指定数目分组