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

无第三方库实现矩阵赋值异常:单元素修改引发多行同步变更

问题:修改矩阵元素时所有行对应位置均被改动

原代码

def create_matrix(xy):
    matrix = []
    matrix_y = []
    x = xy[0]
    y = xy[1] 
    for z in range(y):
        matrix_y.append(0)
    for n in range(x):
        matrix.append(matrix_y)
    return matrix

def set_matrix(matrix,xy,set):
    x = xy[0] 
    y = xy[1] 
    matrix[x][y] = set
    return matrix

index = [4,5]
index_2 = [3,4]

z = create_matrix(index)

z = set_matrix(z,index_2, 12)
print(z) 

输出结果

[[0, 0, 0, 0, 12], [0, 0, 0, 0, 12], [0, 0, 0, 0, 12], [0, 0, 0, 0, 12]]

问题原因

你在create_matrix函数里犯了一个常见的引用错误:先创建了一个单独的matrix_y列表,然后循环把这个同一个列表的引用添加到matrix中。矩阵里的每一行其实都是指向同一个列表对象,修改其中任意一行的元素,都会同步影响所有行。

解决方案

修改create_matrix函数,在每次循环中创建新的行列表,确保每一行都是独立的对象:

def create_matrix(xy):
    matrix = []
    x = xy[0]
    y = xy[1] 
    # 每次循环生成新的行列表,避免引用复用
    for n in range(x):
        matrix_y = []
        for z in range(y):
            matrix_y.append(0)
        matrix.append(matrix_y)
    return matrix

def set_matrix(matrix, xy, val):
    x = xy[0] 
    y = xy[1] 
    matrix[x][y] = val
    return matrix

index = [4,5]
index_2 = [3,4]

z = create_matrix(index)
z = set_matrix(z, index_2, 12)
print(z) 

修正后输出

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 12]]

也可以用列表推导式简化create_matrix的写法,更简洁高效:

def create_matrix(xy):
    x, y = xy
    return [[0 for _ in range(y)] for _ in range(x)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:24:10