
本文介绍如何纯 python 实现二维网格(列表嵌套)的多次 90° 顺时针旋转,包含正确旋转逻辑、边界处理、完整可运行示例及常见错误分析。
在 Python 中对二维列表进行 90 度顺时针旋转,核心在于理解坐标映射关系:原矩阵中第 i 行第 j 列的元素,在顺时针旋转 90° 后,会出现在新矩阵的第 j 行、第 n−1−i 列(假设为 n×n 方阵)。但更直观且通用的实现方式是——先转置,再水平翻转:
- 转置:new[i][j] = original[j][i]
- 水平翻转(每行逆序):new[i] = original[i][::-1]
二者组合即等价于一次 90° 顺时针旋转。对于 N×N 方阵,可简化为一行列表推导式:
def rotate_90_clockwise(grid):
n = len(grid)
# 等价于:转置 + 每行反转
return [[grid[n - 1 - j][i] for j in range(n)] for i in range(n)]不过,更清晰、不易出错的写法是分步实现(也兼容非方阵,本题默认方阵):
def rotate_90_clockwise(grid):
# 步骤1:转置(行列互换)
transposed = [[grid[j][i] for j in range(len(grid))] for i in range(len(grid[0]))]
# 步骤2:每行反转 → 实现顺时针90°
return [row[::-1] for row in transposed]⚠️ 注意:你原始代码中存在多个关键问题:
- rotate90() 函数未 return 任何值 → 返回 None(导致输出 "none");
- 循环范围写为 range(N-1),漏掉了最后一行/列(应为 range(N));
- 未处理多次旋转(N 次需调用 N 次,或优化为 N % 4 次,因每 4 次回归原状);
- 输入解析逻辑与题目样例不匹配(题目给的是固定 3×3 网格,而非先输维度再输数据)。
✅ 正确的完整解决方案如下(适配题目输入格式):
# 读取输入:首行为旋转次数,随后为网格(行数=列数,由数据行数决定)
N = int(input().strip()) # 旋转次数
# 读取网格(直到 EOF 或空行)
grid = []
try:
while True:
line = input().strip()
if line:
row = list(map(int, line.split()))
grid.append(row)
except EOFError:
pass
# 确保是方阵(题目隐含条件)
n = len(grid)
# 定义单次90°顺时针旋转函数
def rotate_once(g):
# 转置 + 行反转
transposed = [[g[j][i] for j in range(n)] for i in range(n)]
return [row[::-1] for row in transposed]
# 执行 N 次旋转(优化:只需 N % 4 次)
for _ in range(N % 4):
grid = rotate_once(grid)
# 输出结果(每行数字用空格分隔)
for row in grid:
print(' '.join(map(str, row)))? 示例验证:
输入:
1 4 3 1 6 5 2 9 7 3
执行 1 次旋转后,输出为:
9 6 4 7 5 3 3 2 1
但注意:题目期望输出是:
1 2 3 3 5 7 4 6 9
这实际对应 逆时针 90° × 1 次(或顺时针 90° × 3 次)。因此需确认题目中“rotate 90deg N times”是否默认为顺时针。若样例输出为逆时针,则应改用:
def rotate_90_counterclockwise(g):
transposed = [[g[j][i] for j in range(n)] for i in range(n)]
return [row[::-1] for row in transposed[::-1]] # 转置 + 整体行反转更稳妥的做法是:明确约定方向,并在注释中说明。本教程默认按顺时针实现,符合绝大多数编程题惯例;若需匹配题目标准输出,请将 N 替换为 (4 - N % 4) % 4 再旋转(即等价于逆时针 N 次)。
? 总结:
- 旋转本质是坐标变换,推荐“转置 + 反转”两步法,逻辑清晰、无索引越界风险;
- 务必 return 结果,避免返回 None;
- 多次旋转可用模 4 优化,提升效率;
- 输入解析需严格匹配题目格式(本题为先输 N,再输网格,无额外维度输入);
- 不依赖 NumPy,仅用原生列表推导式,简洁高效,适合算法面试与基础教学。










