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

设置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:22:03