为何Python中该代码无法实现二维方阵的转置?
问题分析与解决:Python二维方阵转置异常
你这段代码的核心问题是**invert = array并没有创建新数组,只是让invert和array指向同一个列表对象**。修改invert的同时,原array的元素会被同步改变,导致循环中后续读取的array[i][j]已经是被修改后的值,自然无法得到正确的转置结果。
举个具体的例子:
- 当
i=0,j=1时,执行invert[1][0] = array[0][1],会把原数组第二行第一列的4改成2,此时原array的第二行变成了[2,5,6] - 后续
i=1,j=0时,读取array[1][0]得到的是修改后的2而非原始的4,最终结果就出现了部分转置的异常。
正确实现方式
方法1:初始化新数组后填充
先创建一个和原方阵尺寸一致的空数组,再逐个填充转置后的值:
array = [[1,2,3],[4,5,6],[7,8,9]] n = len(array) # 初始化n行n列的空数组 invert = [[0]*n for _ in range(n)] for i in range(n): for j in range(n): invert[j][i] = array[i][j] print(invert) # 输出: [[1,4,7],[2,5,8],[3,6,9]]
方法2:列表推导式简化实现
如果不想写嵌套循环,方阵转置可以用列表推导式一行完成:
array = [[1,2,3],[4,5,6],[7,8,9]] invert = [[row[i] for row in array] for i in range(len(array))]
或者利用zip函数更简洁(注意zip返回元组,需要转成列表):
invert = [list(col) for col in zip(*array)]
内容的提问来源于stack exchange,提问作者user23385446
相关产品推荐
相关产品推荐

