You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python列表按N个元素分批迭代取出直至列表耗尽?

Python列表按指定大小分组的实现方法

给定如下Python列表和N值:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 3

需要将列表分成若干子列表,每个子列表最多包含N个元素,若总长度无法被N整除,最后一个子列表元素数量可以少于N,且所有元素仅出现一次(对顺序无要求)。以下是几种实用的实现方式:

方法一:列表推导式(推荐)

利用Python的切片特性,一行代码即可完成,简洁高效且保留原顺序:

result = [l[i:i+N] for i in range(0, len(l), N)]
print(result)  # 输出: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

原理:range(0, len(l), N)生成步长为N的起始索引(0、3、6、9),每次从原列表中截取从索引i到i+N的片段,最后一次截取时若剩余元素不足N个,切片会自动取到列表末尾。

方法二:循环分批截取(会修改原列表)

通过循环每次截取并删除原列表的前N个元素,直到原列表为空:

result = []
while l:
    result.append(l[:N])
    del l[:N]
print(result)

注意:这种方式会直接修改原列表,适合不需要保留原列表的场景。

方法三:迭代器+islice(适合大数据集)

如果处理的是非常大的列表或迭代器,用itertools.islice可以避免一次性加载所有元素到内存:

from itertools import islice

iterator = iter(l)
result = []
while True:
    chunk = list(islice(iterator, N))
    if not chunk:
        break
    result.append(chunk)
print(result)

打乱顺序分组(可选)

如果不需要保留原元素顺序,可以先打乱列表再分组:

import random

random.shuffle(l)
result = [l[i:i+N] for i in range(0, len(l), N)]
print(result)

内容的提问来源于stack exchange,提问作者Hendrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:25:57