本文介绍如何不依赖 numpy 或 pandas,仅用标准库和嵌套循环,将一组具有 x/y 坐标的客户对象构建成完整的二维距离矩阵(即对称方阵),每行表示某客户到所有客户的欧氏距离。
要生成真正的二维距离矩阵(而非扁平化的一维列表),关键在于:外层循环遍历每个客户 i,内层循环计算 i 到所有客户 j 的距离,并将这些距离收集为一个子列表;再将该子列表整体追加到主列表中。这样最终得到的 Distances 就是一个 n × n 的嵌套列表,满足 Distances[i][j] 表示第 i 个客户到第 j 个客户的欧氏距离。
以下是修正后的完整实现(假设已导入 math.sqrt):
from math import sqrt # 距离计算函数(优化版:直接返回,避免中间变量) def get_distance(a, b): dx = a.getX() - b.getX() dy = a.getY() - b.getY() return sqrt(dx * dx + dy * dy) # 构建二维距离矩阵 Distances = [] for i in range(nr_customers): row = [] # 初始化第 i 行 for j in range(nr_customers): row.append(get_distance(customer[i], customer[j])) Distances.append(row) # 将整行加入矩阵
✅ 结果验证示例:
若 nr_customers = 3,则 Distances 形如:
[
[0.0, d01, d02], # customer[0] → all
[d10, 0.0, d12], # customer[1] → all
[d20, d21, 0.0] # customer[2] → all
]由于欧氏距离对称,dij == dji,且对角线恒为 0.0(自身到自身距离为 0)。
⚠️ 注意事项:
至此,你已获得一个结构清晰、可直接索引访问的标准二维距离矩阵,可用于后续路径规划、聚类分析或启发式算法等场景。