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将html转成PDF的实现代码(包含中文)
Mar 04 Python
Python学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
用Python实现一个简单的线程池
Apr 07 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
python如何构建mock接口服务
Jan 28 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 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通用检测函数集合
2011/02/08 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
原生javascript实现连连看游戏
2019/01/03 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python实现自动重启本程序的方法
2015/07/09 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
flask session组件的使用示例
2018/12/25 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Python 复平面绘图实例
2019/11/21 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
详解python中的lambda与sorted函数
2020/09/04 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
文员个人的求职信范文
2013/09/26 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
2015年端午节活动总结
2015/02/11 职场文书
深入理解go slice结构
2021/09/15 Golang