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 相关文章推荐
web.py在模板中输出美元符号的方法
Aug 26 Python
用Python的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
如何利用Fabric自动化你的任务
Oct 20 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
python实现停车管理系统
Nov 30 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
Python道路车道线检测的实现
Jun 27 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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 Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php文件缓存类汇总
2014/11/21 PHP
详解php协程知识点
2018/09/21 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
对pandas中to_dict的用法详解
2018/06/05 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
关于numpy数组轴的使用详解
2019/12/05 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
新加坡交友网站:be2新加坡
2019/04/10 全球购物
数据保密承诺书
2014/06/03 职场文书
重阳节活动总结
2014/08/27 职场文书
2014年电教工作总结
2014/12/19 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2015年双拥工作总结
2015/04/08 职场文书
爱的教育观后感
2015/06/17 职场文书
python requests模块的使用示例
2021/04/07 Python
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers