设置10×10矩阵对角线为0时出现索引越界错误求助
问题分析
你的代码核心问题出在矩阵初始化的结构错误:
- 你写的
m = [[[math.inf] * 10] for i in range(10)]创建的是一个三维列表(10个元素,每个元素又是一个包含1个10元素列表的列表),而非你需要的二维10×10矩阵。 - 后续赋值
m[i][i] = 0时,当i=0,你把m[0]里的第一个元素(原本是[inf]*10的列表)直接替换成了整数0,导致m[0]变成[0];当i>=1时,m[i]里只有索引0的元素,访问m[i][i]自然会触发索引越界错误。
修复方案
第一步:正确初始化二维矩阵
去掉初始化代码里多余的一层方括号,生成标准的二维列表:
import math # 创建10×10的二维矩阵,每个元素初始为math.inf m = [[math.inf] * 10 for i in range(10)]
这里[[math.inf]*10 for ...]会循环生成10个独立的列表,每个列表包含10个math.inf,是符合需求的二维矩阵结构。
第二步:设置对角线为0
不需要双重循环,单循环就能高效完成:
for i in range(len(m)): m[i][i] = 0
如果后续有其他逻辑必须用双重循环,确保判断和赋值对应:
for i in range(len(m)): for j in range(len(m[i])): if i == j: m[i][j] = 0
验证结果
执行修复后的代码,会得到一个10×10的矩阵,所有对角线元素为0,其余元素保持math.inf,完全符合预期。
内容的提问来源于stack exchange,提问作者Christopher Renauro
相关产品推荐
相关产品推荐

