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

Python如何修改矩阵指定位置元素,使其对应位置匹配另一个矩阵

问题原因分析

核心问题

问题由Python可变对象的浅拷贝特性导致,错误出在矩阵B的初始化代码:

mat_B = [[0]*C]*R                   #Initialise matrix B to be the same size as A

[0]*C会生成一个长度为C的独立列表,本身没有问题,但后续乘R的操作不会生成R个独立的新列表,只是把同一个子列表的引用复制了R次。也就是说mat_B中所有行都指向同一个内存地址的列表,只要修改任意一行的第j个元素,所有行的第j个元素都会同步变化,这就是你看到修改单个位置、整列都被更新的原因。

解决方案

将mat_B的初始化逻辑改为用列表推导式生成独立行即可,两种常用正确写法:

  • 写法1(简洁高效):
mat_B = [[0]*C for _ in range(R)]
  • 写法2(可读性更高):
mat_B = [[0 for _ in range(C)] for _ in range(R)]

修正后完整示例

if __name__ == '__main__':
    mat_A = [[0, 0, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 0, 0]]
    R = len(mat_A)
    # 原代码取len(mat_A[1])存在边界问题,矩阵只有1行时会报错,建议取首行长度
    C = len(mat_A[0])
    # 正确初始化矩阵B
    mat_B = [[0]*C for _ in range(R)]

    for i in range(R):
        for j in range(C):
            if mat_A[i][j] == 1:
                mat_B[i][j] = 1
    print(mat_B)

运行后输出符合预期:
[[0, 0, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 0, 0]]

该修改仅替换初始化逻辑,不会影响你if循环内的其他复杂业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:10