您的位置:首页 > 编程语言 > Python开发

矩阵的螺旋排列 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