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

Python如何根据列表连续元素的中点构造目标区间列表

Python实现列表相邻元素中点区间分割

不需要写大量if/else分支,用Python内置的序列操作就能简洁实现。

核心逻辑

首先梳理计算规则本质:

  • 最终输出的区间总数和原列表长度一致
  • 所有区间的端点共原列表长度+1个:第一个端点是原列表首元素,最后一个端点是原列表尾元素,中间的端点依次是原列表每对相邻元素的中点
  • 相邻两个端点组合成一个区间,就是最终需要的结果

中点计算可以简化为两数平均值:(a + b) / 2,和你给出的(b - a)/2 + a计算结果完全一致。

简洁实现代码

版本1:列表推导式写法(最Pythonic)

def get_intervals(arr):
    # 组装所有分界点
    break_points = [arr[0]] + [(a + b) // 2 for a, b in zip(arr, arr[1:])] + [arr[-1]]
    # 相邻分界点组合为区间
    return [[s, e] for s, e in zip(break_points, break_points[1:])]

# 测试用例
origin_list = [60, 120, 180, 240, 480]
print(get_intervals(origin_list))

运行输出完全匹配预期:

[[60, 90], [90, 150], [150, 210], [210, 360], [360, 480]]

注:如果需要保留浮点结果,把//(整数除法)换成/即可。

版本2:单次遍历写法(性能更优,适合超长列表)

如果列表长度很大,不想额外生成分界点列表,可以一次遍历完成计算:

def get_intervals(arr):
    intervals = []
    current = arr[0]
    for num in arr[1:]:
        mid = (current + num) // 2
        intervals.append([current, mid])
        current = mid
    intervals.append([current, arr[-1]])
    return intervals

写法优势

  • 没有冗余的条件判断分支,逻辑和需求规则完全对齐
  • 利用zip处理相邻元素对,是Python序列操作的通用惯用写法
  • 对任意长度≥2的数值列表都能直接适配,不需要额外修改边界逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:57:27