TypeError求助:道路最短路径计算函数报列表索引类型错误
搞定这个列表索引类型错误!
嘿,先看你抛出的错误提示:
TypeError: list indices must be integers, not str
这个问题其实很好定位,我们一步步来捋:
第一个坑:变量名笔误
你的函数参数是line,但在调用g.inv()的时候,你写了lines['coordinates'][l+1][0]——多了个s!如果lines是个字典(不是列表),那用整数l+1去索引它肯定会报错,因为字典只认字符串/哈希类型的键,不认整数索引呀。
第二个要确认的点:line['coordinates']的结构
你得先搞清楚line['coordinates']到底是列表还是字典:
- 如果它是坐标点组成的列表,那用整数
l索引完全没问题; - 如果它是字典(比如键是字符串),那
line['coordinates'][l]这种写法就会触发同样的错误,这时候你得调整遍历方式,比如先把字典里的坐标值提取出来再处理。
修正后的代码
先把最显眼的笔误改了,顺便帮你修正了遍历范围的小问题(原代码len(line)-1应该是len(line['coordinates'])-1,不然遍历的不是坐标点):
def shortestPath1(g, line): # 初始化累计路径长度 cumulativeLength = 0 # 遍历坐标点列表,从第0个到倒数第2个(因为要和下一个点配对) for l in range(len(line['coordinates']) - 1): # 把lines改成line,统一变量名 azF, azB, distance = g.inv( line['coordinates'][l][0], line['coordinates'][l][1], line['coordinates'][l+1][0], line['coordinates'][l+1][1] ) cumulativeLength += distance return cumulativeLength
额外排查小技巧
要是改完还报错,先打印一下line['coordinates']的类型和内容,确认它的结构:
print("coordinates的类型:", type(line['coordinates'])) print("coordinates的内容:", line['coordinates'])
如果输出显示是字典,那你得重新梳理数据结构,把坐标点整理成列表再计算路径。
内容的提问来源于stack exchange,提问作者andyco25
相关产品推荐
相关产品推荐

