Python中使用欧氏距离查找最近坐标点的实现问题
查找最近坐标点功能实现方案
实现说明
原有欧氏距离计算函数默认返回带提示语的字符串元组,仅适合直接打印输出,作为工具函数供其他逻辑调用时需要额外解析返回值,我们提供两种实现方案:
方案1(推荐):优化距离计算函数返回值
先调整distance函数直接返回数值型距离,后续逻辑更简洁,复用性更强:
from math import sqrt # 优化后的距离计算函数,直接返回数值型距离 def distance(loc1_coordinates, loc2_coordinates): point1x, point1y = loc1_coordinates point2x, point2y = loc2_coordinates return sqrt((point1x - point2x)**2 + (point1y - point2y)**2) def closest_destination(start_city, city_dict): start_loc = city_dict[start_city] min_distance = float('inf') closest_city = '' # 遍历所有城市点位 for city, loc in city_dict.items(): # 跳过起点自身 if city == start_city: continue current_dis = distance(start_loc, loc) # 更新最小距离对应的城市 if current_dis < min_distance: min_distance = current_dis closest_city = city return closest_city # 测试代码 cities = {'A':[5,21], 'B':[43,76], 'C':[56,19], 'D':[21,37], 'E':[76,23], 'F':[45,56], 'G':[23,13]} print(closest_destination('A', cities)) # 输出结果为 G
方案2:保留原有distance函数不变
如果必须保留原有distance函数的返回格式,只需在调用时解析返回的距离字符串即可:
from math import sqrt # 原有距离计算函数完全不变 def distance(loc1_coordinates, loc2_coordinates): point1x, point1y = loc1_coordinates point2x, point2y = loc2_coordinates Distance = sqrt((point1x-point2x)**2 + (point1y-point2y)**2) return "The distance between this two points is", str(round(Distance, 14))+" units" def closest_destination(start_city, city_dict): start_loc = city_dict[start_city] min_distance = float('inf') closest_city = '' for city, loc in city_dict.items(): if city == start_city: continue # 解析原有函数返回的距离值 _, dis_str = distance(start_loc, loc) current_dis = float(dis_str.rstrip(' units')) if current_dis < min_distance: min_distance = current_dis closest_city = city return closest_city # 测试代码 cities = {'A':[5,21], 'B':[43,76], 'C':[56,19], 'D':[21,37], 'E':[76,23], 'F':[45,56], 'G':[23,13]} print(closest_destination('A', cities)) # 输出结果为 G
内容的提问来源于stack exchange,提问作者Green Uit
相关产品推荐
相关产品推荐

