我需要编写一个函数,当从输入中给出矩阵时,将根据特殊顺序读取和打印矩阵。代码应该顺时针绕过边界来打印矩阵。因此,例如,如果矩阵是以特殊形式打印矩阵python
[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]
它会输出列表
1,2,3,4,5,5,5,4,3,2,1,1
我知道这将需要一个循环,所以我创建for循环,将打印的第一线,但我不知道该怎么走。我觉得我必须定义矩阵中每个列表的最终数字,如n-1,其中n是长度
我需要编写一个函数,当从输入中给出矩阵时,将根据特殊顺序读取和打印矩阵。代码应该顺时针绕过边界来打印矩阵。因此,例如,如果矩阵是以特殊形式打印矩阵python
[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]
它会输出列表
1,2,3,4,5,5,5,4,3,2,1,1
我知道这将需要一个循环,所以我创建for循环,将打印的第一线,但我不知道该怎么走。我觉得我必须定义矩阵中每个列表的最终数字,如n-1,其中n是长度
使用-1索引python列表将返回列表的最后一个元素,所以有无需考虑n-1
。
reversed
返回一个生成器,该生成器以相反顺序返回提供的迭代元素而不创建参数的副本。
m=[[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]]
def get_edges(M):
res = M[0]
for l in M[1:-1]:
res.append(l[-1])
res += reversed(M[-1])
for l in reversed(M[1:-1]):
res.append(l[0])
return res
print get_edges(m)
一下:
data =[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
for i in range(len(data[0])):
print data[0][i]
for i in range(1,len(data)-1):
print data[i][len(data[i])-1]
for i in range(len(data[len(data)-1])-1,0,-1):
print data[len(data)-1][i]
for i in range((len(data)-1),0,-1):
print data[i][0]
这是超级有用的,我有很多困难概念化我如何索引矩阵的方式,只有最后一个号码将被收到,我现在看到它是如何完成的 – noahdukehart
这不是肯定的最有效的方式,但它的工作原理 和有些Python的。
#matrix is represented as list of list form for simplicity
matrix = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
def find_border(matrix):
result=[]
#printing up
for i in matrix[0][:-1]: #Slicing the first row to exclude the last element
result.append(i)
#right
for row in matrix:
result.append(row[-1]) #Getting last element of each row
#down
for i in list(reversed(matrix[-1]))[:-1]: #Iterating the last row in reversed order and leaving the 1st element of last row
result.append(i)
#left
for row in reversed(matrix): #Iterating through rows in reversed , getting first element
result.append(row[0])
print(",".join([str(i) for i in result])) #Printing result in whatever manner required
find_border(matrix)
这可以用一个简单的一行来完成:
>>> m = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
>>> print((lambda M:[m[p[1]][p[0]]for p in sorted([(x,y)for x in range(len(m[0]))for y in range(len(m))if x in(0,len(m[0])-1)or y in(0,len(m)-1)],key=lambda p:M.atan2(len(m)/2.0-p[1],len(m[0])/2.0-p[0])+(2*M.pi if M.atan2(len(m)/2.0-p[1],len(m[0])/2.0-p[0])<M.atan2(len(m)/2.0,len(m[0])/2.0)else 0))])(__import__("math")))
[1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1, 1]
所以,你要穿越边界的数字?看起来像是一份给我的学校作业,所以当你有几乎可以工作的示例代码时,试着让它工作并回到这里。 –