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]]
- *號: *matrix將會展開列表matrix,得到三個列表。這是解包處理
- zip函數可接受幾個可迭代對象進行打包,該函數對展開的到的三個列表進行壓縮處理。
- zip函數的到的是一個zip對象,它是一個迭代器(因此也屬於一個可迭代對象),通過list()函數將zip對象轉換成列表