Python中嵌套的列表推導式,以及實際應用中的更佳做法

Python中嵌套的列表推導式,以及實際應用中的更佳做法

語法說明和示例來源自Python3.8官方文檔

以轉置矩陣的例子來說明嵌套列表推導式的使用:

我們以Python中嵌套的列表來作爲矩陣的存儲結構,下面是一個3x4的矩陣,它由 3 個長度爲 4的列表組成:

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

矩陣的轉置操作即交換矩陣的行列,下面以嵌套的列表推導式完成該需求:

>>>[[row[i] for row in matrix] for i in range(4)] 

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 

內層的for是進行求值的,所以該例子相當於:

transposed = []                                                                                                          
for i in range(4): 
    transposed.append([row[i] for row in matrix]) 

實際應用中我們能用內置函數去組成複雜的流程語句,zip()函數將會很好的處理這種情況:

>>>list(zip(*matrix))
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
  1. *號: *matrix將會展開列表matrix,得到三個列表。這是解包處理
  2. zip函數可接受幾個可迭代對象進行打包,該函數對展開的到的三個列表進行壓縮處理。
  3. zip函數的到的是一個zip對象,它是一個迭代器(因此也屬於一個可迭代對象),通過list()函數將zip對象轉換成列表
發佈了33 篇原創文章 · 獲贊 43 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章