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获取beautifulphoto随机某图片代码实例
Dec 18 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
基于Python List的赋值方法
Jun 23 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
python实现局域网内实时通信代码
Dec 22 Python
Django 构建模板form表单的两种方法
Jun 14 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 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生成Gif图片验证码
2013/10/27 PHP
Jquery焦点图实例代码
2014/11/25 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
基于javascript数组实现图片轮播
2016/05/02 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
jquery实现聊天机器人
2020/02/08 jQuery
js判断密码强度的方法
2020/03/18 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
scrapy头部修改的方法详解
2020/12/06 Python
如何利用python 读取配置文件
2021/01/06 Python
编写strcpy函数
2014/06/24 面试题
自考生自我评价分享
2014/01/18 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
护理不良事件检讨书
2014/02/06 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
学生操行评语大全
2014/04/24 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
五年级下册复习计划
2015/01/19 职场文书
《灰雀》教学反思
2016/02/19 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
导游词之日本富士山
2020/01/06 职场文书
win10下go mod配置方式
2021/04/25 Golang
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js