本文介绍如何不依赖 numpy 或 pandas,仅用标准库和嵌套循环,将一组具有 x/y 坐标的客户对象构建成完整的二维距离矩阵(即对称方阵),其中 `distances[i][j]` 表示第 i 位客户与第 j 位客户之间的欧氏距离。
要生成真正的二维距离矩阵(而非一维扁平列表),关键在于:外层循环按客户索引 i 迭代,内层循环为该客户 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) # 将整行加入矩阵此时 Distances 是一个 nr_customers × nr_customers 的嵌套列表,满足:
✅ 注意事项:
为函数提升复用性:def build_distance_matrix(customers):
n = len(customers)
matrix = []
for i in range(n):
row = []
for j in range(n):
row.append(get_distance(customers[i], customers[j]))
matrix.append(row)
return matrix
# 使用示例
Distances = build_distance_matrix(customer)该方法简洁、可读性强,完全基于 Python 原生语法,是教学与轻量级场景下构建距离矩阵的标准实践。