You need to enable JavaScript to run this app. Python实现Matrix类randomize方法填充矩阵触发IndexError报错咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Matrix类randomize方法填充矩阵触发IndexError报错咨询

报错触发原因
  • 类初始化阶段仅创建了一个没有任何子元素的外层空列表self.data = [],未按照矩阵的行列结构,为每一行提前创建对应的子列表。
  • 执行self.data[i].append(value)时,第一步需要定位self.data中索引为i的行列表。由于此时外层self.data的长度为0,不存在任何可访问的子元素,访问i索引时直接超出列表合法的索引范围,触发IndexError: list index out of range异常。
  • 逻辑偏差点:代码默认self.data已经预置了与行数匹配的空行结构,但实际初始化流程完全没有完成这部分结构搭建。
代码修复方案

方案1:在randomize循环中补全行结构

在每一轮行循环的起始位置,先为self.data追加一个空的行列表,再往对应行中添加随机数,修改后的完整可运行代码如下:

import random
class Matrix:
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self.data = []
    def randomize(self):
        for i in range(self.rows):
            # 先初始化当前行的空列表
            self.data.append([])
            for j in range(self.cols):
                value = random.randint(0, 10)
                self.data[i].append(value)

方案2:初始化阶段预置矩阵结构

在__init__方法中提前完成所有空行的创建,从根源上避免后续访问时的索引越界,调整后的代码片段:

# 替换原有的self.data初始化行
self.data = [[] for _ in range(self.rows)]

此时randomize方法不需要额外调整行结构,原有的逐元素append逻辑即可正常运行。

方案3:简化写法一次性构建矩阵

可以通过嵌套列表生成式直接在randomize方法中完成整个随机矩阵的构建,省去逐层append的冗余逻辑:

def randomize(self):
    self.data = [
        [random.randint(0, 10) for _ in range(self.cols)]
        for _ in range(self.rows)
    ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 05:06:04