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

如何从给定嵌套列表中找到与目标坐标最接近的子列表?

问题描述

我有一个目标坐标 [-82.819309, 40.081296],还有一个包含多个坐标子列表的嵌套列表,示例如下:

[[-83.0347849999999, 39.945993],
 [-82.957851, 40.060118],
 [-82.994303, 40.013227],
 [-82.8265609999999, 39.9207779999999],
 [-82.9984709999999, 39.887616],
 ...]

我需要从这个嵌套列表中找出与目标坐标曼哈顿距离最小的子列表(计算逻辑是对应坐标差的绝对值之和)。比如:

>>> getmin([1,2], [[1,1],[1,4],[2,3],[3,2]]) 
[1,1]

对应的计算过程:

[1,2] 与 [1,1] 的距离:abs(1-1) + abs(2-1) = 1
[1,2] 与 [1,4] 的距离:abs(1-1) + abs(2-4) = 2
[1,2] 与 [2,3] 的距离:abs(1-2) + abs(2-3) = 2
[1,2] 与 [3,2] 的距离:abs(1-3) + abs(2-2) = 2

请问该如何实现这个需求?

实现方法

方法一:纯Python内置函数实现

直接利用Python的min()函数,通过key参数指定曼哈顿距离的计算逻辑,代码简洁高效:

def getmin(target, coords):
    return min(coords, key=lambda x: abs(x[0] - target[0]) + abs(x[1] - target[1]))

# 测试示例
target = [1, 2]
coords_list = [[1,1],[1,4],[2,3],[3,2]]
print(getmin(target, coords_list))  # 输出: [1,1]

# 实际场景调用
your_target = [-82.819309, 40.081296]
your_coords = [[-83.0347849999999, 39.945993], ...]
closest_coord = getmin(your_target, your_coords)
print(closest_coord)

方法二:使用numpy优化(适合大数据量)

如果你的坐标列表非常大,用numpy的向量运算可以显著提升效率:

import numpy as np

def getmin_np(target, coords):
    target_arr = np.array(target)
    coords_arr = np.array(coords)
    # 计算所有坐标的曼哈顿距离
    distances = np.abs(coords_arr - target_arr).sum(axis=1)
    # 找到距离最小的索引并返回对应坐标
    min_index = np.argmin(distances)
    return coords[min_index]

# 调用示例
your_target = [-82.819309, 40.081296]
your_coords = [[-83.0347849999999, 39.945993], ...]
closest_coord = getmin_np(your_target, your_coords)
print(closest_coord)

说明

  • 两种方法的距离计算逻辑完全匹配你给出的规则,即两个坐标对应元素差的绝对值之和。
  • 方法一适合中小规模数据,无需额外依赖;方法二适合大规模数据集,利用numpy的向量化计算加速。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:00:55