2015-10-14 213 views
-1

我需要編寫一個函數,當從輸入中給出矩陣時,將根據特殊順序讀取和打印矩陣。代碼應該順時針繞過邊界來打印矩陣。因此,例如,如果矩陣是以特殊形式打印矩陣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是長度

+0

所以,你要穿越邊界的數字?看起來像是一份給我的學校作業,所以當你有幾乎可以工作的示例代碼時,試着讓它工作並回到這裏。 –

回答

1

使用-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) 
0

一下:

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] 
+0

這是超級有用的,我有很多困難概念化我如何索引矩陣的方式,只有最後一個號碼將被收到,我現在看到它是如何完成的 – noahdukehart

0

這不是肯定的最有效的方式,但它的工作原理 和有些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) 
3

這可以用一個簡單的一行來完成:

>>> 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] 
+0

*簡單...宏偉... * – Ffisegydd

+0

我不會稱之爲「簡單」;) – Shivendra