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 相关文章推荐
python xlsxwriter库生成图表的应用示例
Mar 16 Python
linux下python使用sendmail发送邮件
May 22 Python
Python标准库shutil用法实例详解
Aug 13 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
Python适配器模式代码实现解析
Aug 02 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
关于Python错误重试方法总结
Jan 03 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python二分法实现实例
2013/11/21 Python
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python函数的5种参数详解
2017/02/24 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
通过cmd进入python的实例操作
2019/06/26 Python
python 求10个数的平均数实例
2019/12/16 Python
python初步实现word2vec操作
2020/06/09 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
什么是规则表达式
2012/05/03 面试题
《一株紫丁香》教学反思
2014/02/19 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
python实现局部图像放大
2021/11/17 Python
PHP获取学生成绩的方法
2021/11/17 PHP
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang