矩阵的螺旋排列 Python实现
2017-12-05 22:02
1686 查看
矩阵的螺旋排列
描述
以二维列表方式给定一个M*N的矩阵(M行,N列),以螺旋的顺序返回矩阵所有元素,并按照列表形式输出,各元素以逗号为间隔。例如,给定矩阵如下:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
那么按照螺旋形状应该返回 [1,2,3,6,9,8,7,4,5]
程序的框架参考如下:
def SpiralOrder(matrix): ... matrix = eval(input()) res = SpiralOrder(matrix) print(res)
输入
示例1:[[1,2,3],[4,5,6],[7,8,9]]
输出
示例2:[1, 2, 3, 6, 9, 8, 7, 4, 5]一开始当
4000
成输入为方阵了,写成了下面这样
def GenerateMatrix(l): length = len(l) dx, dy = [0,1,0,-1], [1,0,-1,0] res, step, x, y, num= [[0]* length for i in range(length)], length-1, 0, 0, 1 while step>0: for i in range(4): for j in range(step): res[int(x)][int(y)] = int(num) x, y, num=x+dx[i],y+dy[i],num+1 step-=2 x,y = (length-step)/2, (length-step)/2 if step==0: res[int(x)][int(y)]=int(num) return res l=eval(input()) ans=GenerateMatrix(l) print(ans)
没有用到给定矩阵,如果不是等差且差值为1就不对了,况且输入还有不是方阵的
但这种简化的写法(将方向做成下标变换的数组)和一开始的赋值方式还是很有借鉴意义的
[[0]* length for i in range(length)]
附上修改的代码,不断往列表里Append
def GenerateMatrix(l): length = len(l) dx, dy = [0,1,0,-1], [1,0,-1,0] res=[] step, x, y= length-1, 0, 0 try: while step>0: for i in range(4): for j in range(step): res.append(l[int(x)][int(y)]) x, y=x+dx[i],y+dy[i] step-=2 x,y = (length-step)/2, (length-step)/2 if step==0: res.append(l[int(x)][int(y)]) return res except: return res l=eval(input()) ans=GenerateMatrix(l) print(ans)
然后上课看到这种写法,很精妙,通过列表反转解决了很多问题,不再需要做四次循环还要设置循环变量,也不再用判断奇数偶数导致的最后一个的赋值需要判断,实在是太完美了
m=eval(input()) ans=[] try: while True: ans+=m.pop(0) for l in m: ans.append(l.pop()) '''将每一行的最后一个元素加到列表里''' ans+=m.pop()[::-1] '''将最后一行反转后加入列表''' for l in m[::-1]: '''将剩余的行反转,将每一行的第一个加入''' ans.append(l.pop(0)) except: print(ans)
相关文章推荐
- Python实现矩阵相乘
- 稀疏矩阵之python实现
- 用python实现排列
- 递归:求螺旋排列数字的矩阵
- 通过矩阵求两个向量集中元素两两之间的欧氏距离(python实现)
- python实现RDD转成聚类输入矩阵
- 螺旋矩阵(C语言实现)- 2016.01.04
- 数组全排列算法的python实现
- python实现求解列表中元素的排列和组合问题
- python实现算法题-数组的重新排列
- Java实现-螺旋矩阵1
- 面试例题:输入n,求一个n x n矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)
- Java实现-螺旋矩阵2
- python实现RDD转成聚类输入矩阵
- Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
- Python求矩阵特征值及特征向量和实现对角化矩阵简化矩阵n次方运算
- 求两个矩阵中向量的欧氏距离(python实现)
- Python+matplotlib实现填充螺旋实例
- 矩阵分解在推荐系统的应用以及python代码的实现
- 模拟法简单实现螺旋矩阵