You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从元组列表中找到距离最近的一对坐标点?

最近邻点对函数问题排查与实现

原有代码错误汇总

  • 变量名冲突:使用内置函数名len作为自定义列表的变量名,覆盖了len()函数功能,导致获取数组长度时报错
  • 语法错误:range((len(A))存在多余左括号,括号不匹配无法通过语法检查
  • 逻辑错误:计算每个点的距离时,没有排除点自身,np.argmin返回的永远是当前点自己的索引(自身距离为0),无法得到和其他点的最近距离
  • 功能不匹配:原有代码仅尝试获取最小距离值,没有存储对应的点坐标,也没有封装为要求的函数形式,同时调用了列表不存在的min()方法,运行会报错

正确实现方案

以下代码满足输入二维坐标元组列表,返回距离最近的两个点的需求,同时优化了计算逻辑避免重复运算:

import numpy as np

def nearest_neighbor(points):
    point_arr = np.array(points)
    point_count = point_arr.shape[0]
    # 初始化最小距离为无穷大,最近点对为空
    min_distance = np.inf
    closest_points = None

    for i in range(point_count):
        # 仅与排在当前点之后的点计算,避免重复计算、排除自身距离为0的干扰
        distances = np.linalg.norm(point_arr[i+1:] - point_arr[i], axis=1)
        current_min = distances.min()
        if current_min < min_distance:
            min_distance = current_min
            # 定位最小距离对应的点索引
            sub_min_idx = distances.argmin()
            j = i + 1 + sub_min_idx
            # 转换为元组格式符合输出要求
            closest_points = (tuple(point_arr[i]), tuple(point_arr[j]))
    return closest_points

# 测试用例
if __name__ == "__main__":
    test_points = [(1, 2), (4, 5), (5, 5), (4, 1)]
    print(nearest_neighbor(test_points))

运行后输出结果为((4, 5), (5, 5)),符合预期要求。

内容的提问来源于stack exchange,提问作者Parsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:54:05