Python中将矩阵参数直接赋值给变量后转置结果出错是什么原因?
核心错误原因
new_matrix = m本质是对象引用绑定,二者指向内存中同一个二维列表,修改new_matrix的元素时,原矩阵m的元素也会同步被修改- 循环赋值过程中,你读取的
m[k][i]已经是前面步骤修改后的错误值,而非最初输入的原始矩阵值,所以最终转置结果不符合预期
适配任意n×n矩阵的解决方案
你不需要提前预设矩阵大小,可通过输入矩阵的维度动态生成独立的新矩阵,示例实现如下:
def transpose(m): n = len(m) # 列表推导式生成独立的同尺寸新矩阵,避免和原矩阵共享内存 new_matrix = [[0 for _ in range(n)] for _ in range(n)] for i in range(n): for k in range(n): new_matrix[i][k] = m[k][i] return new_matrix
注意:不要使用
[[0]*n]*n的写法生成新矩阵,该写法会让所有行引用同一个列表对象,修改任意一行的元素都会同步修改所有行,同样会导致逻辑错误。
如果需要更简洁的实现,可以直接用Python内置的zip函数完成转置,该写法还支持非方阵的转置操作:
def transpose(m): return [list(row) for row in zip(*m)]
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

