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 相关文章推荐
简明 Python 基础学习教程
Feb 08 Python
Python文件读取的3种方法及路径转义
Jun 21 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
浅谈Python基础之I/O模型
May 11 Python
python之django母板页面的使用
Jul 03 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Flask框架模板继承实现方法分析
Jul 31 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
python实现双色球随机选号
Jan 01 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
浅谈Python 参数与变量
2020/06/20 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
村官学习十八大感想
2014/01/15 职场文书
好听的队名和口号
2014/06/09 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
男生贾里读书笔记
2015/06/30 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
使用Python开发冰球小游戏
2022/04/30 Python