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实现的系统实用log类实例
Jun 30 Python
Python的requests网络编程包使用教程
Jul 11 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python3生成手写体数字方法
Jan 30 Python
详解Python中的动态属性和特性
Apr 07 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
关于Keras Dense层整理
May 21 Python
python如何编写win程序
Jun 08 Python
Python自省及反射原理实例详解
Jul 06 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
Flask response响应的具体使用
Jul 15 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
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
python 初始化一个定长的数组实例
2019/12/02 Python
python实现ip地址的包含关系判断
2020/02/07 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
python中round函数保留两位小数的方法
2020/12/04 Python
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
校领导推荐信
2013/11/01 职场文书
平安建设实施方案
2014/03/19 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
超市周年庆活动方案
2014/08/16 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
技术入股合作协议书
2014/10/07 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
赢在执行观后感
2015/06/16 职场文书
婚宴父亲致辞
2015/07/27 职场文书
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技