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
相关产品推荐
相关产品推荐

