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

Python构建KD树报TypeError列表索引不能为浮点数错误求助

KD树构建时浮点数索引报错排查

报错基础信息

  • 触发位置:Scripts\gw_kd_tree.py 文件第89行build_kdtree函数内
  • 抛出错误:TypeError: list indices must be integers or slices, not float
  • 对应出错代码:
node = KDTreeNode [(point=point_list[median], left=build_kdtree(point_list[0:median], depth+1), right=build_kdtree(point_list[median+1:], depth+1))]

错误原因

核心触发逻辑是作为列表索引、切片边界的median变量为浮点数类型,Python原生列表不支持浮点数作为索引或切片参数。
常规KD树实现中median是用来取当前维度分割点的中位数索引,绝大多数场景下这个值是浮点数的原因是:计算中位数索引时使用了普通除法/,Python3中/运算符无论是否能整除,返回结果都是float类型(比如长度为3的列表,3/2得到的是1.0而非整数1),用这个值去取列表元素、做切片就会触发类型错误。
另外贴出的代码还存在一处语法问题:实例化KDTreeNode类时错误使用了列表定义的方括号[],应该用传参的圆括号(),这个问题在索引错误修复后也会触发语法报错,需要一并修正。

修复方案

  1. 把median的计算逻辑从普通除法改为整数除法,使用//运算符,确保返回值为整数类型:
    # 原错误写法参考:median = len(point_list) / 2
    median = len(point_list) // 2
    
    如果median是其他自定义逻辑计算得到的,在作为索引用之前用int(median)做强制类型转换即可。
  2. 修正类实例化的语法错误,把KDTreeNode后面的方括号改成圆括号。

修复后的完整代码段参考:

median = len(point_list) // 2
node = KDTreeNode(
    point=point_list[median],
    left=build_kdtree(point_list[:median], depth + 1),
    right=build_kdtree(point_list[median+1:], depth + 1)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:15:54