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

二维矩阵旋转函数输出不符合预期,请求解析原因

二维矩阵旋转函数的问题分析

问题描述

实现了一个用于二维矩阵旋转的rotate函数,输入矩阵为[[1,2,3],[4,5,6],[7,8,9]],期望输出为[[7,4,1],[8,5,2],[9,6,3]],但函数返回了三个完全相同的长列表;而直接执行逐个插入的代码却能得到正确结果,需解释背后原因。

错误代码示例

# Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
# Output: [[7,4,1],[8,5,2],[9,6,3]]

def rotate(matrix):
    master_lst = [[]]*len(matrix)
    
    for val in matrix:
        for i, v in enumerate(val):
            master_lst[i].insert(0, v)
            #print(f"master_lst[{i}].insert(0, {v})")
    
    return master_lst

matrix = [[1,2,3],[4,5,6],[7,8,9]]
rotate(matrix)

错误输出

[[9, 8, 7, 6, 5, 4, 3, 2, 1],
 [9, 8, 7, 6, 5, 4, 3, 2, 1],
 [9, 8, 7, 6, 5, 4, 3, 2, 1]]

正确执行的代码示例

master_lst = [[], [], []]
master_lst[0].insert(0, 1)
master_lst[1].insert(0, 2)
master_lst[2].insert(0, 3)
master_lst[0].insert(0, 4)
master_lst[1].insert(0, 5)
master_lst[2].insert(0, 6)
master_lst[0].insert(0, 7)
master_lst[1].insert(0, 8)
master_lst[2].insert(0, 9)
master_lst

原因分析

问题核心出在master_lst = [[]]*len(matrix)这一行:

  • 这种写法创建的列表中,所有子列表都是同一个空列表对象的引用。也就是说master_lst[0]、master_lst[1]、master_lst[2]指向内存中同一个列表,无论操作哪个索引的子列表,本质都是在修改同一个列表。最后返回的三个元素自然是同一个列表的内容,因此出现三个完全相同的长列表。
  • 而手动写[[], [], []]时,每个[]都是独立创建的新列表对象,彼此没有关联。修改不同索引的子列表只会影响对应的那个列表,因此能得到正确结果。

修正方案

将创建master_lst的代码改为列表推导式,确保每个子列表都是独立的新对象:

master_lst = [[] for _ in range(len(matrix))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:37:56