處理序列的操作和列表的方法中,Python還包括一些更高級(jí)的操作,稱作為列表解析表達(dá)式,提供了一種處理象矩陣這樣結(jié)構(gòu)強(qiáng)大的工具.
例如,假設(shè)我們需要從列舉的矩陣中取出第二列,就可以使用列表解析獲取
M=[[1,2,3],
[4,5,6],
[7,8,9]]
col2 = [row[1] for row in M]
col2
>>>
[2,5,8]
實(shí)際應(yīng)用中,列表解析可以更加復(fù)雜,舉例:
# 對(duì)第二列的每個(gè)元素加1
[row[1] + 1 for row in M]
>>>
[3,6,9]
# 過(guò)濾奇數(shù)
[row[1] for row in M if row[1] % 2 == 0]
>>>
[2,8]
# 矩陣對(duì)角線元素
diag = [M[i][i] for i in [0,1,2]]
>>>diag
[1, 5, 9]
事實(shí)上,列表解析還可以應(yīng)用在其他的可迭代對(duì)象上,而這樣的解析語(yǔ)法也可以創(chuàng)建產(chǎn)生所需結(jié)構(gòu)的生成器
g = (sum(row) for row in M)
>>>g
<generator object <genexpr> at 0x00000239175C21A8>
>>> next(g)
6
>>> next(g)
15
而上述的事實(shí)同樣可以使用內(nèi)置函數(shù)map進(jìn)行包裝
list(map(sum,M))
>>>
[6,15,24]