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

实现Graph类对比BFS与Prim算法时触发Graph对象不可下标的TypeError

根本原因解析
  • 触发TypeError: 'Graph' object is not subscriptable的核心是代码的对象引用层级错误:get_neighbours方法中编写的self[i][e]逻辑,将Graph类实例本身当成了可下标访问的邻接矩阵数组,但自定义Python类默认不支持[]下标取值操作(即可被下标索引),因此直接抛出类型错误。
  • 项目中采用邻接矩阵结构存图时,邻接矩阵是作为Graph类的实例属性存储的(通常命名为adj/adj_matrix等),并非Graph实例本身。之前的错误本质是跳过了属性引用环节,直接对类实例做下标操作。
针对性修复方案
  • 直接修正邻接边的访问路径:将原代码中self[i][e]的写法,替换为对实际存储邻接矩阵的属性的访问,例如邻接矩阵存储在self.adj_matrix中时,对应判断逻辑改写为self.adj_matrix[i][e],匹配邻接矩阵“第一维为顶点i的邻接行、第二维为顶点e对应边权重”的常规存储结构。
  • 若需保留原有的self[i][e]写法,可给Graph类实现__getitem__魔术方法,让类实例本身支持下标访问:
    class Graph:
        def __getitem__(self, index):
            # 下标访问时直接返回邻接矩阵对应索引的行数据
            return self.adj_matrix[index]
    
    这种写法虽然能快速跑通代码,但更推荐使用明确的属性访问逻辑,减少魔术方法带来的代码阅读歧义。
后续校验要点
  • 修复后需确认邻接矩阵的存储结构与顶点编号完全匹配:保证adj_matrix[i][e]对应顶点i和顶点e之间的边权重,避免索引错位导致的邻接关系判断错误。
  • 可快速校验实例属性类型:实例化Graph对象后,打印邻接矩阵属性的类型,确认其为list、numpy数组这类本身支持下标访问的结构,排除多层对象嵌套导致的二次下标错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 00:24:04