Python矩阵反对角线填充1的代码实现求助
如何用Python给矩阵的反对角线填充1?
我看你现在在学用Python实现矩阵,想要把反对角线的元素设为1,但当前代码跑出来的是主对角线的效果,咱们一步步来改好它!
先看看你写的原代码里的几个小问题:
- 你只定义了列数
nbr_co,但没定义行数nbr_li,运行的时候肯定会报错; - 循环
for i in range()是空的,没有指定循环范围; grid[i][]和grid[][i]是语法错误,Python里不能这么写空索引;- 你写的逻辑其实是在设置主对角线(
grid[i][i]),而反对角线的索引规律不一样。
修正后的完整代码
# 先让用户输入方阵的边长(行数=列数,因为反对角线针对方阵更合理) size = int(input("Enter the size of the square matrix: ")) # 创建一个全0的size×size矩阵 grid = [[0]*size for i in range(size)] def affiche(grid): for row in grid: print(row) # 遍历每一行,设置反对角线元素为1 for i in range(size): # 反对角线的列索引 = 矩阵边长 - 1 - 当前行索引 grid[i][size - 1 - i] = 1 # 打印矩阵 affiche(grid)
改动说明
- 统一矩阵尺寸:改成让用户输入方阵的边长(行数=列数),这样反对角线的逻辑更清晰;如果需要非方阵,咱们再调整,但通常反对角线指的是方阵里那条从右上到左下的线。
- 修正循环逻辑:循环范围设为
range(size),遍历每一行的索引i;反对角线的列位置是size - 1 - i,比如当size=5时:- 第0行 → 列索引4 →
grid[0][4] = 1 - 第1行 → 列索引3 →
grid[1][3] = 1 - ...以此类推,正好对应右上到左下的反对角线。
- 第0行 → 列索引4 →
- 简化打印函数:把
for i in range(nbr_li)改成直接遍历grid里的每一行,代码更简洁易读。
运行示例(输入size=5时)
输出会是:
[0, 0, 0, 0, 1] [0, 0, 0, 1, 0] [0, 0, 1, 0, 0] [0, 1, 0, 0, 0] [1, 0, 0, 0, 0]
这样就正好是你想要的反对角线全为1的矩阵啦!
内容的提问来源于stack exchange,提问作者Xarnia
相关产品推荐
相关产品推荐

