【发布时间】:2021-04-16 03:07:40
【问题描述】:
我正在尝试编写一个函数,以使用nearest neighbor algorithm 从列出的第一个城市开始计算通过城市列表的近似旅行商路线。但是,每次我运行它都会得到IndexError: list index out of range。
在调试错误时,我发现index 的值从一个循环迭代到下一个循环迭代保持不变,而不是改变。当需要追加时,代码会检查if not in 条件;因为它是False,它将1 添加到i 并移动到循环的下一个迭代。一旦它达到比数组中存在的更高的数字,它就会给我错误。
所以我的问题是,为什么执行不进入第一个if not in 块?似乎代码忽略了它。
对于我的实际问题,我正在阅读一个包含 317 个城市的文件,每个城市都有一个索引和两个坐标。下面是一个简短的测试城市示例列表:
Nodelist = [
(1, 63, 71),
(2, 94, 71),
(3, 142, 370),
(4, 173, 1276),
(5, 205, 1213),
(6, 213, 69),
(7, 244, 69),
(8, 276, 630),
(9, 283, 732),
(10, 362, 69),
]
这是函数的代码:
def Nearest(Nodelist,Distance,index):
Time_Calculation = time.time()
Newarray=[]
Newarray.append(Nodelist[0])
for i in range(0,len(Nodelist)):
for j in range(1,len(Nodelist)):
if (Nodelist[j] not in Newarray):
DisEquation = math.sqrt(pow(Nodelist[j][1]-Newarray[i][1],2)+pow(Nodelist[j][2]-Newarray[i][2],2))
if Distance==0:
Distance=DisEquation
if Distance > DisEquation:
index=j
Distance=DisEquation
if(Nodelist[index] not in Newarray):
Newarray.append(Nodelist[index])
Distance=0
print (time.time() - Time_Calculation)
return Newarray
调用它的代码:
NearestMethodArr=Nearest(Cities,b,index)
print(NearestMethodArr)
print(len(NearestMethodArr))
print 语句应该产生:
[(1, 63, 71), (2, 94, 71), (6, 213, 69), (7, 244, 69), (10, 362, 69), (3, 142, 370), (8, 276, 630), (9, 283, 732), (5, 205, 1213), (4, 173, 1276)]
10
【问题讨论】:
-
您是否阅读过有关制作minimal, reproducible example 的帮助页面?上下文很好,但是您包含的细节似乎不相关(主要是文件读取代码)。你也不包括测试这个所需的一切——即一个(小)样本城市列表。 (此外,更清晰的变量名称会帮助所有人,可能包括您自己。)
-
这是迄今为止我描述我的问题的最佳方式,但我会在这方面做更多工作我将编辑并添加我拥有的城市的小列表以及我的错误出现的地方,感谢您的反馈
-
@CrazyChucky 我希望这个编辑后的版本更清晰