处理序列的操作和列表的方法中,Python还包括一些更高级的操作,称作为列表解析表达式,提供了一种处理象矩阵这样结构强大的工具.
例如,假设我们需要从列举的矩阵中取出第二列,就可以使用列表解析获取
M=[[1,2,3],
[4,5,6],
[7,8,9]]
col2 = [row[1] for row in M]
col2
>>>
[2,5,8]
实际应用中,列表解析可以更加复杂,举例:
# 对第二列的每个元素加1
[row[1] + 1 for row in M]
>>>
[3,6,9]
# 过滤奇数
[row[1] for row in M if row[1] % 2 == 0]
>>>
[2,8]
# 矩阵对角线元素
diag = [M[i][i] for i in [0,1,2]]
>>>diag
[1, 5, 9]
事实上,列表解析还可以应用在其他的可迭代对象上,而这样的解析语法也可以创建产生所需结构的生成器
g = (sum(row) for row in M)
>>>g
<generator object <genexpr> at 0x00000239175C21A8>
>>> next(g)
6
>>> next(g)
15
而上述的事实同样可以使用内置函数map进行包装
list(map(sum,M))
>>>
[6,15,24]