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

Python中如何将有序数字列表按相邻数值间隔拆分为子列表

Python实现已排序列表按间隔拆分的高效方案

核心思路

因为输入已经是有序列表,只需要单次遍历判断相邻元素差值即可完成拆分,不需要额外排序或复杂计算,时间复杂度可达理论最优的O(n)。

实现代码

基础遍历实现(最推荐,兼容性高、无额外依赖)

def split_sorted_list(sorted_list, gap_threshold=3):
    # 空列表直接返回
    if not sorted_list:
        return []
    # 初始化结果,第一个元素先放入第一个子列表
    result = [[sorted_list[0]]]
    for current_num in sorted_list[1:]:
        last_num_in_group = result[-1][-1]
        # 差值大于等于阈值就创建新分组
        if current_num - last_num_in_group >= gap_threshold:
            result.append([current_num])
        else:
            result[-1].append(current_num)
    return result

# 测试示例
sample_list = [1,2,4,7,9,10,15,20]
print(split_sorted_list(sample_list))
# 输出:[[1, 2, 4], [7, 9, 10], [15], [20]]

基于itertools.groupby的简洁实现

如果偏好函数式写法,可以用Python标准库的groupby实现,本质也为单次遍历:

from itertools import groupby

def split_sorted_list(sorted_list, gap_threshold=3):
    if not sorted_list:
        return []
    prev = sorted_list[0]
    group_id = 0
    def gen_group_id(num):
        nonlocal prev, group_id
        if num - prev >= gap_threshold:
            group_id += 1
        prev = num
        return group_id
    return [list(group) for _, group in groupby(sorted_list, key=gen_group_id)]

方案优势

  • 时间复杂度为O(n):仅遍历一次列表所有元素,是该需求下的理论最优效率
  • 空间复杂度为O(1)(除结果存储外):仅使用少量变量记录状态,无多余内存开销
  • 可扩展性强:仅需修改gap_threshold参数即可调整拆分的间隔阈值,适配不同业务规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:15:02