我有一个坐标列表和一个可以解决它们之间距离的函数。
我正在尝试创建一个以起点和坐标列表作为输入的函数。然后函数找到最接近起点的点,然后找到最接近该点的点...
我遇到的问题是下一个可能是最接近的坐标,所以在这一点上重复,所以我需要删除它。
def getroute(start, allpoints):
routelist = [start]
next = getclosestpoint(start, allpoints)
allpoints.remove(start)
for i in range(0,len(allpoints)):
routelist.append(next)
*allpoints.remove(next[1])*
next = getclosestpoint(next[1], allpoints)
return routelist
我一直收到错误:
allpoints.remove(next[1])
TypeError: 'int' object has no attribute '__getitem__'
但是当我打印下一个[1]时,我得到例如[4,1],这是在我的所有点列表中:[ - 3,-3],[1,-1],[4,1],[ - 2,5]
任何人都可以解释为什么不删除它?
感谢。
更新: 我想我已经通过以下方式进行了管理:
latlngs = [[-3, -3], [1,-1], [4,1], [-2,5], [2,2], [-6,1]]
def gethypot(latlng):
hypot = sqrt(pow(latlng[0],2)+pow(latlng[1],2))
return hypot
def getdistance(point1, point2):
lat_apart = point2[0] - point1[0]
lng_apart = point2[1] - point1[1]
distance = gethypot([lat_apart,lng_apart])
return distance
def getclosestpoint(start, points):
allpoints = points
distances = []
allpoints.remove(start)
shortest = 0
for i in range(0,len(allpoints)):
distances.append(getdistance(start,allpoints[i]))
if getdistance(start,allpoints[i]) == min(distances):
shortest = allpoints[i]
return shortest
def getroute(start, allpoints):
routelist = [start]
points = allpoints
next = getclosestpoint(start, points)
for i in range(0,len(points)):
routelist.append(next)
next = getclosestpoint(next, points)
return routelist
答案 0 :(得分:0)
我认为你的循环是错误的。实际上,您希望将所有点从allpoints
移至routelist
,以便您可以使用:
def getroute(start, allpoints):
routelist = []
next = start
while allpoints:
routelist.append(next)
allpoints.remove(next)
_, next = getclosestpoint(next, allpoints)
return routelist