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

如何计算列表内相邻坐标点距离?解决索引越界报错问题

问题分析与解决

你的代码出现索引越界,核心是循环逻辑完全错误,加上变量和缩进的问题,导致遍历范围超出列表长度。先拆解问题,再给修正方案:

原代码的核心问题

  • 嵌套循环完全没必要:你要计算的是「相邻点」的距离,只需要遍历一次,依次取第i个和第i+1个点即可,两层循环会计算大量非相邻点,还会触发索引越界。
  • 循环范围错误:外层循环range(0, len(cords))会遍历到最后一个点,但最后一个点没有下一个点可计算;内层循环range(1, len(cords)-1)的范围逻辑混乱,当列表长度小于2时,这个范围直接无效。
  • 变量与缩进问题:dis、dista未在函数内初始化,容易受全局变量干扰;return语句缩进错误,会导致语法问题。
  • 莫名引用cm.dis:代码里突然出现cm.dis,如果不是你自定义的模块,这本身就是错误,应该直接用转换后的坐标列表。

修正后的代码

import math

def find_distance(cords):
    # 初始化存储转换后坐标和距离的列表
    converted_cords = []
    distances = []
    
    # 把所有坐标转换为浮点数(如果输入已经是浮点数,这步可以跳过)
    for point in cords:
        converted = [float(ele) for ele in point]
        converted_cords.append(converted)
    
    # 遍历到倒数第二个点,依次计算和下一个点的距离
    for i in range(len(converted_cords) - 1):
        x1, y1 = converted_cords[i]
        x2, y2 = converted_cords[i+1]
        # 计算欧氏距离
        dist = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
        distances.append(dist)
    
    return converted_cords, distances

关键说明

  1. 循环范围控制:range(len(converted_cords)-1)确保只遍历到倒数第二个点,避免取i+1时超出列表索引。
  2. 简化逻辑:去掉不必要的嵌套循环,直接处理相邻点,既高效又不会触发索引越界。
  3. 变量本地化:在函数内初始化converted_cords和distances,避免全局变量的意外影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:10:44