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

如何将列表拆分为最小固定大小分块,让最后一块包含全部剩余元素

问题原因

原代码的问题出在循环次数计算逻辑:int(len(lst)/3)会对除法结果向下取整,当列表长度不是分块大小的整数倍时,最后不足分块大小的元素会被直接跳过。同时你现有代码每次切片只取3个元素,即使后续还有剩余元素也不会处理。

修复方案

方案1:按你要求的分块规则(最后一块包含所有剩余元素,共3个分块)

如果你要求最终分块为[[0,1,2], [3,4,5], [6,7,8,9]],即当剩余元素不足2倍分块大小时,全部合并为最后一块,可以用以下代码:

lst = [0,1,2,3,4,5,6,7,8,9]
chunk_size = 3
chunks = []
current_idx = 0
total_len = len(lst)

while current_idx < total_len:
    # 剩余元素不足2倍分块大小时,全部作为最后一块
    if total_len - current_idx < 2 * chunk_size:
        chunks.append(lst[current_idx:])
        break
    chunks.append(lst[current_idx:current_idx + chunk_size])
    current_idx += chunk_size

# 如果需要扁平化的结果列表,直接拼接所有子列表即可
templist = sum(chunks, [])
print(chunks)
print(templist)

运行输出:

[[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

方案2:通用分块规则(最后一块可小于分块大小)

如果允许最后一块小于3个元素(即最终分块为[[0,1,2], [3,4,5], [6,7,8], [9]]),可以用更简洁的Python切片写法,性能也更高:

lst = [0,1,2,3,4,5,6,7,8,9]
chunk_size = 3
# 列表推导式直接生成分块
chunks = [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)]
templist = sum(chunks, [])

print(chunks)
print(templist)

运行输出:

[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:54:00