Python中如何对二维列表按照与指定坐标点的距离排序
Python实现按坐标点距离排序
我们可以直接利用Python内置的sorted()函数的自定义key规则实现排序,比较两点距离时无需计算平方根,直接比较距离的平方和即可,两者的排序结果完全一致,还能减少不必要的运算开销。
完整可运行代码示例
def sort_by_distance(arr, target_point): # key为子元素坐标与目标点的距离平方和,按从小到大排序 return sorted(arr, key=lambda item: (item[0] - target_point[0])**2 + (item[1] - target_point[1])**2) # 测试用例1 arry1 = [[6,5,7,8],[2,5,5,6]] target1 = [3,5] print(sort_by_distance(arry1, target1)) # 输出: [[2, 5, 5, 6], [6, 5, 7, 8]] # 测试用例2 arry2 = [[6, 6, 8, 10], [3, 3, 8, 10], [15, 15, 8, 10]] target2 = [16,16] print(sort_by_distance(arry2, target2)) # 输出: [[15, 15, 8, 10], [6, 6, 8, 10], [3, 3, 8, 10]]
补充说明
- 如果需要直接修改原数组而非生成新的排序后数组,可以使用列表的
sort()方法:
arry1.sort(key=lambda item: (item[0] - target1[0])**2 + (item[1] - target1[1])**2)
- 距离计算默认采用欧氏距离,完全匹配需求中的坐标距离比较规则。
内容的提问来源于stack exchange,提问作者tech tutorial
相关产品推荐
相关产品推荐

