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将IP地址在整型和字符串之间轻松转换
Mar 22 Python
Python文件的读写和异常代码示例
Oct 31 Python
python实现微信远程控制电脑
Feb 22 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
python对XML文件的操作实现代码
Mar 27 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
Python之qq自动发消息的示例代码
Feb 18 Python
Python带你从浅入深探究Tuple(基础篇)
May 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
php页面缓存方法小结
2015/01/10 PHP
php压缩文件夹最新版
2018/07/18 PHP
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
JS实现多功能计算器
2020/10/28 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
Python+django实现文件上传
2016/01/17 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Python处理session的方法整理
2019/08/29 Python
python 发送json数据操作实例分析
2019/10/15 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
空气环保标语
2014/06/12 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
Python使用DFA算法过滤内容敏感词
2022/04/22 Python