Python计算多列表间欧氏距离的代码问题排查与修复
修复欧氏距离计算的循环逻辑问题
你的代码核心问题出在**euclidean_list的初始化位置错误**,导致所有距离结果被追加到同一个列表中,无法按test2的元素分组。下面是具体的分析和修复方案:
问题根源
你将euclidean_list定义在所有循环之外,当遍历test2的每个元素时,新计算的距离会不断追加到这个列表里,最终所有距离都堆在一起,而不是每个test2元素对应一个独立的子列表。
修复后的代码
import math euclidean_list_complete = [] test1 = [[0.0, 0.0, 0.0, 152.0, 12.29], [0.0, 0.0, 0.357, 245.0, 10.4], [0.0, 0.0, 0.10, 200.0, 11.0]] test2 = [[0.0, 0.0, 0.0, 72.0, 12.9], [0.0, 0.0, 0.0, 80.0, 11.3]] for i in range(len(test2)): euclidean_list = [] # 每次处理test2的一个元素时,初始化新的子列表 euclidean = 0 for j in range(len(test1)): for k in range(len(test1[0])): euclidean += pow((test2[i][k] - test1[j][k]), 2) # 保留三位小数,匹配期望输出格式 euclidean_list.append(round(math.sqrt(euclidean), 3)) euclidean = 0 euclidean_list_complete.append(euclidean_list) print(euclidean_list_complete)
关键修复点
- 将
euclidean_list的初始化移到test2的遍历循环内部,确保每个test2元素都有专属的子列表存储距离结果。 - 修复了Python3的
print语法(添加括号),保证代码兼容性。 - 使用
round()函数将距离值保留三位小数,和你期望的输出格式一致。
运行结果
执行后会输出:
[[80.002, 173.018, 128.014], [72.006, 165.002, 120.0]]
和你的期望输出完全匹配(120.0与120.000仅为小数显示格式差异,数值等价)。
内容的提问来源于stack exchange,提问作者Iqbal Pratama
相关产品推荐
相关产品推荐

