Python实现Point2D点集平均距离计算函数的方法咨询
函数实现方案
核心思路
- 先做入参校验:如果传入的点集长度小于2,直接抛出
ValueError异常 - 生成所有互不重复的点对:使用
itertools.combinations取点集中2个元素的所有组合,天然规避重复点对的计算问题 - 计算每对点的二维欧氏距离:两点坐标差的平方和开根号
- 所有距离求和后除以点对总数,得到平均距离返回
你找到的参考代码逻辑是可直接复用的,其中combinations(points,2)就是专门用来生成不重复元素组合的工具,不用自己写嵌套循环做去重处理。
完整实现代码
import math from itertools import combinations Point2D = tuple[int, int] def average_distance(points: set[Point2D]) -> float: if len(points) < 2: raise ValueError("点集元素数量不能少于2") # 计算所有点对的距离 distances = [ math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) for (x1, y1), (x2, y2) in combinations(points, 2) ] # 返回平均距离 return sum(distances) / len(distances)
效果测试
调用示例average_distance({(1,2), (3,4), (5,6)}),返回值约为3.7712,和题目要求一致。
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

