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

10x10矩阵修改代码遇list index out of range错误,求修正方案

问题:矩阵修改程序的错误排查与修正

编写程序修改给定的10x10矩阵,若单元格mat[i][j]为1,则将第i行和第j列的所有单元格设为1。以下是我编写的代码:

mat = []
for ele in range(10):
    row = list(map(int, input().split()))
    mat.append(row)

stor = []
for i in range(10):
    for j in range(10):
        if mat[i][j]==1:
            while mat[i][j] in stor:
                j += 1
                if j==10:  
                    j=0
                    i+=1
                    if i==10:  
                        break
            if i<10 and j<10: 
                for k in range(10):
                    mat[k][j] = 1
                    mat[i][k] = 1
                    stor.append(mat[i][j])
                    stor.append(mat[k][j])
                    stor.append(mat[i][k])
            
for i in range(10):
    print(*mat[i])

运行时出现list index out of range错误,报错信息如下:

line 9, in <module>
    if mat[i][j]==1:
       ~~~^^^
IndexError: list index out of range

附测试用例:
输入:

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 

预期输出:

1 0 0 0 1 0 0 0 1 0 
1 0 0 0 1 0 0 0 1 0 
1 0 0 0 1 0 0 0 1 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 0 0 0 1 0 
1 1 1 1 1 1 1 1 1 1  
1 1 1 1 1 1 1 1 1 1 
1 0 0 0 1 0 0 0 1 0 
1 0 0 0 1 0 0 0 1 0
1 0 0 0 1 0 0 0 1 0 

请问需要修正哪里?是否存在其他重大问题?


问题分析与修正方案

1. 索引越界的直接原因

你在while循环里手动修改了外层for循环的i和j变量,当i被加到10之后,外层for循环的下一次迭代会访问mat[10][j]——而矩阵的索引范围是0-9,直接触发越界错误。比如当j循环到9时,j+=1变成10,你把j重置为0同时i+=1,如果此时i已经是9,就会变成10,后续的if mat[i][j]==1自然会报错。

2. 核心逻辑的重大问题

你的stor列表设计完全错误:你存储的是单元格的值(也就是1),而不是需要标记的坐标。这导致while mat[i][j] in stor永远为真(因为你已经把该位置改成1了),要么无限循环,要么错误跳转索引。而且你每次修改行和列时,把修改后的元素都加到stor里,完全起不到“避免重复检查”的作用。

3. 正确实现方案

正确的思路是先遍历一次矩阵,记录所有原本就为1的行号和列号,再根据记录批量修改矩阵——这样不会因为修改矩阵导致后续遍历到新生成的1,避免重复处理。

修正后的代码:

mat = []
for _ in range(10):
    row = list(map(int, input().split()))
    mat.append(row)

# 记录原本存在1的行和列,用集合自动去重
target_rows = set()
target_cols = set()

# 第一次遍历:收集需要置1的行和列
for i in range(10):
    for j in range(10):
        if mat[i][j] == 1:
            target_rows.add(i)
            target_cols.add(j)

# 第二次遍历:根据记录修改矩阵
for i in range(10):
    for j in range(10):
        if i in target_rows or j in target_cols:
            mat[i][j] = 1

# 输出结果
for row in mat:
    print(*row)

4. 方案优势

  • 逻辑清晰,分离了“收集目标”和“修改矩阵”两个步骤,避免互相干扰
  • 用集合存储行和列,自动去重,查询效率高,不会重复处理同一行/列
  • 完全规避了手动修改循环变量导致的索引错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:17:50