Python3实现顺时针旋转矩阵图像的两种算法

小满
小满
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何使用Python3将n×n二维矩阵顺时针旋转90度。通过两种方案实现:利用zip()解压与切片反转的简洁写法,以及基于索引规律的原地赋值方法。文章包含完整的代码示例与运行结果,帮助开发者理解矩阵变换的逻辑与实现细节。

问题描述

给定一个 n × n 的二维矩阵表示一个图像,目标是将该图像顺时针旋转 90 度。这是一个常见的算法问题,通常要求在不使用额外空间(原地修改)或空间复杂度较低的情况下完成。

方案一:利用 zip 与切片反转

这种方法利用了 Python 内置函数的特性,代码非常简洁。核心思路是先对矩阵进行上下翻转(按 X 轴对称),然后再进行转置操作。

  1. 上下翻转:使用切片 matrix[::-1] 将矩阵的行顺序颠倒。
  2. 转置:使用 zip(*...) 将翻转后的矩阵进行解压并转置。
  3. 重组:使用 list() 将 zip 对象转换回列表形式。

具体实现如下:

# -*- coding:utf-8 -*-
#! python3
class Solution:
  def rotate(self, matrix):
    """
    :type matrix: List[List[int]]
    :rtype: void Do not return anything, modify matrix in-place instead.
    """
    matrix[:] = map(list, zip(*matrix[: : -1]))
    return matrix
if __name__ == '__main__':
  # 测试代码
  matrix = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
  ]
  solution = Solution()
  result = solution.rotate(matrix)
  print(result)

运行上述代码,对于输入的 4×4 矩阵,输出结果为:

[[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]

方案二:基于索引规律的原地赋值

如果不使用内置函数,可以通过观察旋转前后元素下标的变化规律来实现。顺时针旋转 90 度后,原矩阵中位置 (i, j) 的元素会移动到新矩阵的 (j, n-1-i) 位置。反之,新矩阵中 (i, j) 的元素来源于原矩阵的 (n-1-j, i)。

为了避免在遍历过程中覆盖尚未处理的元素,可以先创建一个副本 m = matrix.copy(),然后遍历原矩阵的每个位置,从副本中读取对应的值进行赋值。

# -*- coding:utf-8 -*-
#! python3
class Solution:
  def rotate(self, matrix):
    """
    :type matrix: List[List[int]]
    :rtype: void Do not return anything, modify matrix in-place instead.
    """
    m = matrix.copy()
    n = len(matrix)
    for i in range(n):
      matrix[i] = [m[j][i] for j in range(n - 1, -1, -1)]
    return
if __name__ == '__main__':
  # 测试代码
  matrix = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
  ]
  solution = Solution()
  result = solution.rotate(matrix)
  print(result)

该方案的运行结果与方案一完全相同,验证了算法的正确性。这种方法虽然使用了额外的空间来存储副本,但逻辑直观,易于理解矩阵旋转的数学本质。

总结

本文展示了两种在 Python3 中实现矩阵顺时针旋转 90 度的方法。方案一利用 zip 和切片,代码简洁高效;方案二通过索引映射,逻辑清晰。开发者可根据具体场景(如是否允许额外空间、代码可读性要求等)选择合适的实现方式。以上就是Python3实现的旋转矩阵图像算法示例的详细内容,更多关于Python算法的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。