首页 > 解决方案 > 列表推导中表达式的执行顺序

问题描述

给定以下表达式:

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

创建一个矩阵,然后执行列表推导以创建一个平面列表。理解从左到右。

flat = [x for row in matrix for x in row]

随后,对于矩阵中的每一行,其值都是平方的。如何评估这种理解?

squared = [[x**2 for x in row] for row in matrix]

标签: pythonlistlist-comprehension

解决方案


第一个理解等价于:

flat = []
for row in matrix:
    for x in row:
        flat.append(x)

第二种理解等价于:

squared = []
for row in matrix:
    tmp = []
    for x in row:
        tmp.append(x**2)
    squared.append(tmp)

(除了在封闭范围内创建额外的变量,如x, row, tmp.)


推荐阅读