如何修改Python矩阵旋转代码以支持非方阵90度顺时针旋转?
解决任意矩阵90度顺时针旋转的问题
你的代码目前仅能处理方阵,核心问题在于提前固定了新矩阵的维度,以及元素映射的索引逻辑错误,同时打印矩阵的函数也存在适配非方阵的问题。以下是修正后的实现,完全支持任意维度的矩阵(包括空矩阵、非方阵),严格遵循“分配新二维数组→填充旋转后元素→复制回原矩阵”的要求:
问题分析
- 非方阵旋转后维度会变化:比如m行n列的矩阵,旋转后变为n行m列,不能提前固定新矩阵的大小
- 90度顺时针旋转的元素映射规则:原矩阵
matrix[m][n]中,位置(i,j)的元素,旋转后会出现在新矩阵的(j, m-1-i)位置 - 原打印函数的循环逻辑错误:应该遍历矩阵的所有行,而不是按列数循环
修正后的完整代码
def show_matrix(arr): # 处理空矩阵或空行的情况 if not arr or not arr[0]: print([]) return # 遍历所有行打印 for row in arr: print(row) def rotate_90_clockwise(matrix): # 处理空矩阵 if not matrix or not matrix[0]: return [] m = len(matrix) # 原矩阵行数 n = len(matrix[0]) # 原矩阵列数 # 创建新的二维数组,维度为n行m列,初始化为0 rotated = [[0 for _ in range(m)] for _ in range(n)] # 填充旋转后的元素 for i in range(m): for j in range(n): rotated[j][m - 1 - i] = matrix[i][j] # 将新矩阵复制回原矩阵(这里直接返回新矩阵,若要修改原变量可重新赋值) return rotated # 测试示例 # 方阵测试 square_matrix = [[1,2,3],[4,5,6],[7,8,9]] print("原方阵:") show_matrix(square_matrix) rotated_square = rotate_90_clockwise(square_matrix) print("\n旋转后方阵:") show_matrix(rotated_square) # 非方阵测试(2行3列) rect_matrix = [[1,2,3],[4,5,6]] print("\n原非方阵:") show_matrix(rect_matrix) rotated_rect = rotate_90_clockwise(rect_matrix) print("\n旋转后非方阵:") show_matrix(rotated_rect) # 空矩阵测试 empty_matrix = [] print("\n原空矩阵:") show_matrix(empty_matrix) rotated_empty = rotate_90_clockwise(empty_matrix) print("\n旋转后空矩阵:") show_matrix(rotated_empty)
代码说明
show_matrix函数:修复了原函数的循环逻辑,直接遍历矩阵的每一行打印,适配所有维度的矩阵rotate_90_clockwise函数:- 先获取原矩阵的行数
m和列数n,动态创建对应维度的新矩阵 - 使用双重循环按照旋转规则填充新矩阵,确保每个元素映射到正确位置
- 返回旋转后的新矩阵,若需要直接修改原变量,可在调用时执行
matrix = rotate_90_clockwise(matrix)
- 先获取原矩阵的行数
内容的提问来源于stack exchange,提问作者Sanat Sadangi
相关产品推荐
相关产品推荐

