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


Posted in Python onNovember 30, 2019

今天刷《剑指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 相关文章推荐
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
python更改已存在excel文件的方法
May 03 Python
python实现守护进程、守护线程、守护非守护并行
May 05 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
如何验证python安装成功
Jul 06 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 Python
Numpy之将矩阵拉成向量的实例
Nov 30 #Python
numpy np.newaxis 的实用分享
Nov 30 #Python
Python如何使用函数做字典的值
Nov 30 #Python
关于Numpy中的行向量和列向量详解
Nov 30 #Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 #Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 #Python
python 实现多维数组转向量
Nov 30 #Python
You might like
php实现的Cookies操作类实例
2014/09/24 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python将图片转换为字符画的方法
2020/06/16 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
物控部经理职务说明书
2014/02/25 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
经理岗位职责
2015/02/02 职场文书
入党积极分子个人总结
2015/03/02 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
python字典的元素访问实例详解
2021/07/21 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL