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

基于指定范围从单个列表生成嵌套列表的实现方法

如何将平展列表按指定范围生成嵌套列表?

这个需求在Python里有好几种优雅的实现方式,我给你整理几个常用的方案,你可以根据自己的场景选择:

方法一:列表推导式+切片(最简洁直观)

这是Python开发者最常用的写法,利用列表切片的特性一行就能搞定:

li = [1,2,3,4,5,6,7,8,9]
chunk_size = 3  # 指定的范围参数
result = [li[i:i+chunk_size] for i in range(0, len(li), chunk_size)]
print(result)  # 输出: [[1,2,3],[4,5,6],[7,8,9]]

原理说明:

  • range(0, len(li), chunk_size)会生成从0开始、步长为chunk_size的索引序列(这里就是0、3、6)
  • 每次取li[i:i+chunk_size]的切片,正好把原列表按指定大小拆分成子列表
  • 如果原列表长度不是chunk_size的整数倍,最后一个子列表会自动包含剩余的元素(比如原列表是[1,2,3,4,5],chunk_size=3,结果会是[[1,2,3],[4,5]])

方法二:循环手动构建(适合新手理解逻辑)

如果你想更清晰地看到拆分的每一步,用循环一步步构建也是个不错的选择:

li = [1,2,3,4,5,6,7,8,9]
chunk_size = 3
result = []
temp_chunk = []

for num in li:
    temp_chunk.append(num)
    # 当临时列表达到指定长度时,加入结果并重置
    if len(temp_chunk) == chunk_size:
        result.append(temp_chunk)
        temp_chunk = []

# 处理原列表长度不是chunk_size倍数的情况(可选)
if temp_chunk:
    result.append(temp_chunk)

print(result)

这种写法逻辑直白,每一步都可控,适合刚接触Python的朋友理解分组的核心过程。

方法三:用itertools工具包(通用型更强)

如果需要处理更复杂的分组场景(比如给不足长度的分组填充指定值),可以用itertools里的工具:

from itertools import zip_longest

li = [1,2,3,4,5,6,7,8,9]
chunk_size = 3

# 方式1:用指定值填充不足的分组(比如None)
result = list(map(list, zip_longest(*[iter(li)]*chunk_size, fillvalue=None)))

# 方式2:直接忽略不足长度的剩余元素,用zip即可
result = list(map(list, zip(*[iter(li)]*chunk_size)))

print(result)  # 两种方式输出都是[[1,2,3],[4,5,6],[7,8,9]]

原理说明:

  • [iter(li)]*chunk_size创建了chunk_size个指向同一个迭代器的引用
  • zip或zip_longest会从每个迭代器中取一个元素,相当于把原列表按chunk_size个元素一组拆分
  • zip_longest可以通过fillvalue参数指定不足分组时的填充值,灵活性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:12:36