Python一行代码解决矩阵旋转的问题

 更新时间:2019年11月30日 12:41:51   作者:Jason_Bourne_  
今天小编就为大家分享一篇Python一行代码解决矩阵旋转的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

今天刷《剑指offer》的时候碰到这样一道题:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路:可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作,例如 :

1 2 3
4 5 6
7 8 9

利用pop输出并且删除第一行后,再进行一次逆时针旋转,就变成:

6 9
5 8
4 7

然后,继续重复上述操作即可。

最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好几种,转置、顺时针、逆时针,下面直接上代码,用一行python代码实现这三种操作。

矩阵转置:

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix = map(list, zip(*matrix))
print(matrix)
 
>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

矩阵顺时针旋转:先把矩阵上下翻转,然后在转置一下

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix[::-1]))
print(matrix)
 
>>>[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

矩阵逆时针旋转:先把矩阵转置一下,然后在上下翻转

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix))[::-1]
print(matrix)
 
>>>[[3, 6, 9], [2, 5, 8], [1, 4, 7]]

下面是完整的解题代码:

# -*- coding:utf-8 -*-
class Solution:
  # matrix类型为二维列表,需要返回列表
  def printMatrix(self, matrix):
    # write code here
    result = []
    while(matrix):
      result += matrix.pop(0)
      if not matrix or not matrix[0]:
        break
      # 将矩阵逆时针旋转
      matrix[:] = map(list, zip(*matrix))[::-1]
    return result

以上这篇Python一行代码解决矩阵旋转的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python使用Flask-SQLAlchemy连接数据库操作示例

    Python使用Flask-SQLAlchemy连接数据库操作示例

    这篇文章主要介绍了Python使用Flask-SQLAlchemy连接数据库操作,简单介绍了flask、Mysql-Python以及Flask-SQLAlchemy的安装方法,并结合实例形式分析了基于Flask-SQLAlchemy的数据库连接相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python中使用Chaco绘图库

    Python中使用Chaco绘图库

    这篇文章主要介绍了Python中使用Chaco绘图库,Chaco是一个2D的绘图库,如果你安装了Python(x,y)的话,可以在pythonxy的安装目录下的找到Chaco的demo程序,Chaco提供了类似Matlab和pylab的绘图方式,我们称之为面向脚本的绘图方式
    2023-11-11
  • 教你用python实现一个加密的文字处理器

    教你用python实现一个加密的文字处理器

    生活中有时候我们需要对一些重要的文件进行加密,下面这篇文章主要给大家介绍了关于如何用python实现一个加密文字处理器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python binascii 进制转换实例

    python binascii 进制转换实例

    今天小编就为大家分享一篇python binascii 进制转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程

    同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来,下面这篇文章主要给大家介绍了关于使用OpenCV实现迷宫解密的相关资料,需要的朋友可以参考下
    2022-10-10
  • python中input()的用法及扩展

    python中input()的用法及扩展

    这篇文章主要介绍了python中input()的用法及扩展,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 在Python 中同一个类两个函数间变量的调用方法

    在Python 中同一个类两个函数间变量的调用方法

    今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python+opencv像素的加减和加权操作的实现

    python+opencv像素的加减和加权操作的实现

    这篇文章主要介绍了python+opencv像素的加减和加权操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python结合多线程爬取英雄联盟皮肤(原理分析)

    python结合多线程爬取英雄联盟皮肤(原理分析)

    多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。这篇文章主要介绍了python爬取英雄联盟皮肤结合多线程的方法,需要的朋友可以参考下
    2021-05-05
  • 使用python如何将数据集划分为训练集、验证集和测试集

    使用python如何将数据集划分为训练集、验证集和测试集

    这篇文章主要介绍了使用python如何将数据集划分为训练集、验证集和测试集问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论