靈活操作多維矩陣
阿新 • • 發佈:2017-05-24
col 轉置矩陣 extend ever 貪吃蛇 繼續 但是 while 最終
今天這一題是“貪吃蛇”:
給定一個NxN矩陣,從[0][0]開始沿順時針方向遍歷所有元素。如:
1 2 3
8 9 4
7 6 5
這樣一個矩陣,最終的遍歷打印輸出為 1 2 3 4 5 6 7 8 9。
如何做到呢?
這個遍歷其實是不斷打印某個矩陣的四條邊。老老實實的研究出各條邊的起止index規律然後打印出來誠然可以,但是還有一個更簡單的方法:
繼續觀察:
1. 打印第一條邊 1 2 3,實際上是原始矩陣的第一行。
2. 接下來打印的第二條邊 4 5, 是矩陣:
4 5
9 6
8 7
的第一行。而這個矩陣,是去掉第一條邊後剩下的矩陣:
8 9 4
7 6 5
的轉置矩陣的按行倒序。
3. 第三條邊 6 7,是矩陣:
6 7
9 8
的第一行。這個矩陣,又是去掉第二條邊後剩下的矩陣:
9 6
8 7
的轉置矩陣的按行倒序。
4. 依次類推…
實現要點:
1. 去掉多維矩陣的第一行:
用list.pop()。
2. 矩陣的轉置:
用zip(*原矩陣)。
3. 矩陣的按行倒序:
用list.reverse()。
相應的代碼為:
def snail(array): a = [] while array: a.extend(list(array.pop(0))) array = zip(*array) array.reverse()return a
zip和list真是矩陣處理的好幫手。
靈活操作多維矩陣