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

如何在Python中对列表进行不规则分区?是否存在对应内置函数

在Python中实现列表的不规则分区

嘿,这个需求我之前也碰到过!Python本身并没有直接提供和Wolfram Language里Partition[Range@5, UpTo@2]完全对应的内置函数,但我们可以用几种简单的方式轻松实现这个效果——把列表按指定大小分区,最后一段允许不足指定长度。

下面给你几种实用的实现方式:

1. 最简洁的列表推导式

这是日常开发里最常用的方法,一行核心代码就能搞定:

def partition(vals, chunk_size):
    return [vals[i:i+chunk_size] for i in range(0, len(vals), chunk_size)]

测试你的例子看看:

vals = [1,2,3,4,5]
print(partition(vals, 2))  # 输出: [[1, 2], [3, 4], [5]]

原理很直观:从索引0开始,每次以chunk_size为步长截取列表切片,最后一段如果元素不足chunk_size,切片会自动取到列表末尾,完美匹配你的需求。

2. 内存友好的生成器实现(适合大列表)

如果你的列表特别大,不想一次性生成所有切片占用内存,可以用迭代器的方式实现,每次只生成一个分区:

from itertools import islice

def partition_generator(vals, chunk_size):
    iter_vals = iter(vals)
    while True:
        chunk = list(islice(iter_vals, chunk_size))
        if not chunk:
            break
        yield chunk

使用的时候转成列表即可:

vals = [1,2,3,4,5]
print(list(partition_generator(vals, 2)))  # 输出: [[1, 2], [3, 4], [5]]

这种方式不会一次性把所有切片都加载到内存里,处理超大数据集时更高效。

3. 手动循环实现(适合新手理解)

如果你想更清楚地看到每一步的逻辑,可以用循环手动构建结果:

def partition_loop(vals, chunk_size):
    result = []
    current_chunk = []
    for num in vals:
        current_chunk.append(num)
        # 当当前分区达到指定大小,就加入结果并重置
        if len(current_chunk) == chunk_size:
            result.append(current_chunk)
            current_chunk = []
    # 处理最后一段不足指定大小的元素
    if current_chunk:
        result.append(current_chunk)
    return result

测试同样能得到你想要的结果,这种写法逻辑清晰,适合刚学Python的朋友理解分区的过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:52