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

Python实现升序列表按相邻值差>5规则分割为极值子列表

升序数值列表按相邻差值分组实现

需求规则

  • 输入始终为升序排列的数值列表
  • 相邻数值差值等于5时归为同一分组,差值大于5时断开分组
  • 每个分组以[组内最小值, 组内最大值]的格式存储
  • 对应测试用例预期输出:[[5, 15], [25, 35], [45, 55], [65, 65], [75, 85], [95, 95], [105, 105], [115, 130], [145, 145], [165, 165], [185, 185], [200, 240]]

原有代码问题

你写的while循环实现边界处理有漏洞:

  • 末尾分组的判断写在循环内部,遇到列表末尾刚好是连续差值为5的段时,容易出现漏加或者多加的问题
  • 单元素列表场景下循环不会执行,直接返回空列表,不符合要求

修正代码

直接用单次遍历的写法,逻辑更清晰,边界覆盖全,运行后直接匹配预期输出:

# 注意这里的输入截断到240,和预期输出对应,如果你需要处理500、505的场景保留这两个元素即可
x = [5,10,15,25,30,35,45,50,55,65,75,80,85,95,105,115,120,125,130,145,165,185,200,205,210,215,220,225,230,235,240]

if not x:
    print([])
else:
    result = []
    current_group_start = x[0]
    for idx in range(1, len(x)):
        # 相邻差超过5,结束当前分组
        if x[idx] - x[idx-1] > 5:
            result.append([current_group_start, x[idx-1]])
            current_group_start = x[idx]
    # 补上最后一个分组
    result.append([current_group_start, x[-1]])
    print(result)

逻辑说明

  1. 先处理空列表的极端情况,直接返回空
  2. 初始把第一个元素设为第一个分组的起点,因为列表是升序,分组起点就是组内最小值
  3. 从第二个元素开始遍历,只要当前元素和前一个元素差大于5,就把之前的分组(起点到前一个元素)存到结果里,然后把当前元素设为新分组的起点
  4. 遍历完所有元素后,最后一个分组还没存,直接追加到结果即可,分组的终点就是列表最后一个元素,也就是组内最大值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:30:10