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

Python中计算坐标列表与指定坐标的欧氏距离时遇TypeError问题求助

解决Python列表减法导致的TypeError问题

嘿,我来帮你搞定这个报错!你遇到的TypeError: unsupported operand type(s) for -: 'list' and 'list',本质原因很简单:Python原生列表不支持直接用-做元素级减法,而你代码里的x是Geo_Shape列的原生列表,[cord]*len(x)也是列表,所以减不了。

给你两个实用的解决办法:

方法一:转成Numpy数组再计算

直接把列表转成Numpy数组,数组天然支持元素级运算,完美适配np.linalg.norm:

import numpy as np
import pandas as pd

# 假设你的df和cord已经定义
cord = [1.2,5.3]
df['Distances'] = df['Geo_Shape'].apply(lambda x: np.linalg.norm(np.array(x) - np.array(cord), axis=1))

这个方法效率更高,尤其是当你的坐标列表很长的时候——Numpy的向量运算比循环快得多。axis=1参数是告诉Numpy,对每一组坐标对(数组的行)计算欧氏距离。

方法二:用列表推导式逐个计算

如果你更习惯直观的循环逻辑,也可以遍历每个坐标点单独计算:

df['Distances'] = df['Geo_Shape'].apply(lambda x: [np.linalg.norm(np.array(point) - np.array(cord)) for point in x])

这个写法会逐个处理x里的每个坐标点,把每个点转成数组后和cord做减法,再计算距离,结果也是一个列表,和你的需求完全匹配。

验证示例

用你给出的测试数据:

  • Geo_Shape行数据:[[1.2,2.3], [0.3,1.7], [3.2,9.1]]
  • cord:[1.2,5.3]

运行代码后,你会得到结果:array([3. , 3.70809924, 4.29418211])(方法一)或者对应的列表(方法二),完全符合预期的欧氏距离计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:34:11