python 對 list[list] 矩陣進行逆時針旋轉90度 matrix = list(map(list, zip(*matrix)))[::-1]

思路源於:Leetcode的螺旋矩陣題解 - Sui Xin

對於一個矩陣如下。

matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

將其逆時針旋轉90度爲如下形式。

res = [
  [3, 6, 9], 
  [2, 5, 8], 
  [1, 4, 7]
]

代碼僅需一行。

res = list(map(list, zip(*matrix)))[::-1]

解釋

zip(*matrix) 解壓

>>> zip(*matrix)

# 將得到保存如下數組的 zip 對象

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

map(list, _) 將 zip 對象轉爲 list

注意到上述[(1, 4, 7), (2, 5, 8), (3, 6, 9)]中元素爲元組;使用map(list, )爲每個元素套上一個list()函數。

a = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

>>> map(list, a)
# 上述效果與下面的操作相同
>>> tmp = []
>>> for aa in a:
>>> 	tmp.append(list(aa))

即通過map(list, zip(*matrix))得到:包含[[1, 4, 7], [2, 5, 8], [3, 6, 9]]的map對象。

list(_)[::-1] 將 map 對象轉爲 list 並翻轉

先將可迭代對象_包裹成列表,再反轉。

插曲:s = 'python',則s[::-1]nohtyps[::-2]nhy

因此,我們最後實際上是將[[1, 4, 7], [2, 5, 8], [3, 6, 9]]翻轉,即得到 [[3, 6, 9], [2, 5, 8], [1, 4, 7]]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章