Python中不使用numpy和zip计算两个等长列表的欧氏距离
不使用numpy和zip计算两个等长列表的欧氏距离
原代码问题说明
你原来的思路里不需要嵌套循环,嵌套循环会遍历两个列表的所有元素组合,不符合欧氏距离对应位置计算的要求,同时原代码没有定义循环逻辑,x、y变量未赋值。
实现思路
- 欧氏距离要求两个列表对应位置的元素做差计算,仅需要单循环按索引遍历即可
- 因为题目明确两个列表长度相等,我们可以通过索引依次取出两个列表相同位置的元素参与计算
- 计算逻辑:对每对对应位置元素做差后取平方,累加所有平方值后开平方,得到最终欧氏距离
完善后代码
def euclidean_distance(p1, p2): sum_sq = 0 # 按索引遍历两个列表,取p1的长度作为遍历上限即可 for i in range(len(p1)): diff = p1[i] - p2[i] sum_sq += diff ** 2 return sum_sq ** 0.5
测试用例验证
例1测试
list_1 = [0, 5, 6] list_2 = [1, 6, 8] print(euclidean_distance(list_1, list_2)) # 输出结果约为2.449,对应√(1+1+4)=√6
例2测试
list_1 = [0, 1, 2, 3, 4] list_2 = [5, 6, 7, 8, 9] print(euclidean_distance(list_1, list_2)) # 输出结果约为11.180,对应√(25*5)=√125
内容的提问来源于stack exchange,提问作者ghost00708
相关产品推荐
相关产品推荐

