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实现的登录和操作开心网脚本分享
Jul 09 Python
Python中的True,False条件判断实例分析
Jan 12 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Django如何防止定时任务并发浅析
May 14 Python
python实现自动化上线脚本的示例
Jul 01 Python
postman传递当前时间戳实例详解
Sep 14 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
Django Model中字段(field)的各种选项说明
May 19 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 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
CI框架的安全性分析
2016/05/18 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
Python中os.path用法分析
2015/01/15 Python
Python中常用的内置方法
2019/01/28 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
2014年作风建设心得体会
2014/10/22 职场文书
副总经理岗位职责
2015/02/02 职场文书
个人廉洁自律总结
2015/03/06 职场文书
辞职申请书范本
2019/05/20 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL