You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现元组点集合平均距离计算函数的问题排查

错误原因

你遇到的types.Genericaliases has no len()报错的直接原因是代码中points = list[input()]的写法错误:

  • list[xxx]是Python泛型类型注解的语法,不是将对象转为列表的操作,会直接返回泛型别名对象,而非列表
  • 额外调用input()会读取控制台输入,直接覆盖了函数传入的点集合参数

除此之外你的代码还存在多处逻辑、语法、缩进问题:

  • 缩进层级混乱,函数内部代码、循环代码的缩进完全不符合Python规范
  • 遍历逻辑仅计算相邻点的距离,没有覆盖所有点对的组合,不符合“所有点之间平均距离”的需求
  • 已通过from math import sqrt导入平方根函数,后续却错误调用math.sqrt,未导入math模块会触发报错
  • 求和时错误遍历单个距离变量distance,应该遍历存储所有距离的list_dist列表
  • 计算平均值使用整除//,会丢失小数精度,应该使用普通除法/
  • 没有实现点数小于2时抛出ValueError的逻辑
  • 遍历到最后一个点时调用points[index +1]会触发索引越界错误

修正后代码

from math import sqrt
from itertools import combinations

def average_distance(points: set[tuple[int,int]]) -> float:
    # 点数校验
    if len(points) < 2:
        raise ValueError("点集合数量不能少于2")
    # 生成所有不重复的两点组合
    point_pairs = combinations(points, 2)
    total_dist = 0.0
    count = 0
    for (x1, y1), (x2, y2) in point_pairs:
        dist = sqrt((x1 - x2)**2 + (y1 - y2)**2)
        total_dist += dist
        count += 1
    # 计算平均距离,保留4位小数和预期输出对齐
    return round(total_dist / count, 4)

# 测试用例
print(average_distance({(1,2), (3,4), (5,6)}))

运行结果

执行测试用例后输出为3.7712,和预期结果一致。


内容的提问来源于stack exchange,提问作者Agyamarky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:07