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

Python两列表相邻元素差值计算及索引越界问题解决

问题背景

存在两个等长列表,分别存储事件的起始帧(START)与结束帧(END),示例数据如下:

START     END
111        113
118        133
145        186

已知约束:START列表的后一个元素始终大于END列表的前一个元素(例如示例中118 > 113)。
需求为逐组计算START列表下一个元素与对应位置END列表上一个元素的差值(例如示例中118-113、145-133),最终统计所有差值的平均值。

现有代码错误原因

当前实现代码如下:

def estimateAverageBlinkInterval(blinkStartFrame, blinkStopFrame):
    
    estimateAverage = []
    
    for i in range(0, len(blinkStartFrame)):
        print(blinkStartFrame)
        for j in range(0, len(blinkStopFrame)):
            print(blinkStopFrame[j])
            estimateAverage.append(blinkStartFrame[i+1]-blinkStopFrame[j])
        
    return mean(estimateAverage) 

触发索引越界、结果错误的核心原因有两个:

  • 索引范围设置错误:循环i的遍历范围是0到len(blinkStartFrame)-1,当i取到列表最后一个索引时,i+1等于列表长度,超出列表有效索引范围(列表最大有效索引为长度-1),直接触发IndexError: list index out of range。
  • 冗余双层循环:计算逻辑不需要双层遍历两个列表,待求差值是索引一一对应的相邻组:即第i个结束帧,对应第i+1个起始帧,双层循环会生成大量无效差值,完全偏离计算需求。
    之前尝试blinkStartFrame[:-1]切片未生效,是因为没有同步对齐END列表的遍历范围,索引没有一一匹配。

修正实现

方案1:直观循环写法

逻辑最容易理解,直接把循环上限设为列表长度-1,保证i+1不会越界,每次取对应位置的值计算即可:

from statistics import mean

def estimateAverageBlinkInterval(blinkStartFrame, blinkStopFrame):
    intervals = []
    # 遍历到倒数第二个索引即可,i+1最大为列表最后一个索引
    for i in range(len(blinkStartFrame) - 1):
        intervals.append(blinkStartFrame[i+1] - blinkStopFrame[i])
    return mean(intervals)

用示例数据验证:

  • 输入blinkStartFrame = [111, 118, 145],blinkStopFrame = [113, 133, 186]
  • 计算得到差值:118-113=5、145-133=12
  • 返回平均值为(5+12)/2 = 8.5,符合预期。

方案2:zip精简写法

通过切片错位对齐两个列表,用zip直接配对需要计算的数值对,不需要手动管理索引,从根源避免索引越界:

from statistics import mean

def estimateAverageBlinkInterval(blinkStartFrame, blinkStopFrame):
    # blinkStartFrame[1:]:从第二个元素开始的所有起始帧
    # blinkStopFrame[:-1]:从第一个到倒数第二个的所有结束帧
    intervals = [curr_start - prev_end for curr_start, prev_end in zip(blinkStartFrame[1:], blinkStopFrame[:-1])]
    return mean(intervals)

两种写法逻辑完全一致,可根据自己的编码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:12:18