python 实现矩阵按对角线打印


Posted in Python onNovember 29, 2019

如下所示:

Description:
将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)
Example:
Input:
[
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
Output:
[[4],
[3, 3],
[2, 2, 2],
[1, 1, 1],
[5, 5],
[9]]

思路: 考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j从col-1开始遍历,首先考虑j的变化,若j变为0,则保持不变,让i变化。在确定开头元素后,可通过设置i+1,j+1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

(0,3)
(0,2)
(0,1)
(0,0)
(1,0)
(2,0)

其中各lst中的元素index分别为:

[(0,3)]
[(0,2),(1,3)]
[(0,1),(1,2),(2,3)]
[(0,0),(1,1),(2,2)]
[(1,0),(2,1)]
[(2,0)]

代码:

def diagonal_right(matrix):
 if not matrix:
  return []
 row = len(matrix)
 col = len(matrix[0])
 col2 = col
 result = []
 for i in range(row):
  for j in range(col2 - 1, -1, -1): #j倒序遍历
   lst = []
   i1,j1 = i,j #i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择
   while i1 <= row - 1 and j1 <= col - 1:
    lst.append(matrix[i1][j1])
    j1 += 1
    i1 += 1
   result.append(lst)
   if i == 0 and j == 0:#当遍历完(0,0)开头的一条对角线后,让j固定为0
    col2 = 1
 return('the result is: %s'%result,'end')
 
#test
print(diagonal_right([[1],[2]]))
print(diagonal_right([[1]]))
print(diagonal_right([
 [1,2,3,4],
 [5,1,2,3],
 [9,5,1,2]
]))

输出:

python 实现矩阵按对角线打印

变型: 由(0,0)开始向左打印:

思路: 同样考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j也从0开始遍历,首先考虑j的变化,若j变为col-1,则保持不变,让i变化。在找到开头元素后,可通过设置i+1,j-1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

(0,0)
(0,1)
(0,2)
(0,3)
(1,3)
(2,3)

其中各lst中的元素index分别为:

[(0,0)]
[(0,1),(1,0)]
[(0,2),(1,1),(2,0)]
[(0,3),(1,2),(2,1)]
[(1,3),(2,2)]
[(2,3)]

代码:

def diagonal_left(matrix):
 if not matrix:
  return []
 row = len(matrix)
 col = len(matrix[0])
 k=0
 result = []
 for i in range(row):
  for j in range(k,col): # j顺序遍历
   lst = []
   i1, j1 = i, j # i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择
   while i1 <= row - 1 and j1 >=0:
    lst.append(matrix[i1][j1])
    j1 -= 1
    i1 += 1
   if i==0 and j==col-1:
    k=col-1
   result.append(lst)
 return ('the result is: %s' % result, 'end')

# test
print(diagonal_left([[1],[2]]))
print(diagonal_left([[1]]))
print(diagonal_left([
 [1,2,3,4],
 [5,1,2,3],
 [9,5,1,2]
]))

输出:

python 实现矩阵按对角线打印

此问题还可以有多种变型,若从左下角,右下角按对角线打印等,只需要进行简单的修改即可实现。

以上这篇python 实现矩阵按对角线打印就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在windows系统中实现python3安装lxml
Mar 23 Python
Python 的类、继承和多态详解
Jul 16 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
详解Python字典的操作
Mar 04 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python函数的万能参数传参详解
Jul 26 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
django框架中间件原理与用法详解
Dec 10 Python
python实现最短路径的实例方法
Jul 19 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
python之列表推导式的用法
Nov 29 #Python
python 实现方阵的对角线遍历示例
Nov 29 #Python
python 实现一个反向单位矩阵示例
Nov 29 #Python
python 实现矩阵填充0的例子
Nov 29 #Python
python循环嵌套的多种使用方法解析
Nov 29 #Python
python写一个随机点名软件的实例
Nov 28 #Python
关于Python-faker的函数效果一览
Nov 28 #Python
You might like
PHP5中MVC结构学习
2006/10/09 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python用threading实现多线程详解
2017/02/03 Python
Python Requests库基本用法示例
2018/08/20 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
如何基于python操作excel并获取内容
2019/12/24 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
python实现登录与注册系统
2020/11/30 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
微型企业创业投资计划书
2014/01/10 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
经营理念标语
2014/06/21 职场文书
甘南现象心得体会
2014/09/11 职场文书
安全月宣传标语
2014/10/07 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
MySQL常用慢查询分析工具详解
2022/08/14 MySQL