3 回答

TA贡献1810条经验 获得超5个赞
简短的回答是:是的,你的理解是正确的。
只有一个问题:你通常在python代码中使用嵌套列表理解的方式是在多维数组上操作。
一个典型的例子是当您对矩阵进行操作时:
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> [[el - 1 for el in row] for row in matrix]
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
正如您所看到的,“嵌套”通过对矩阵的每个维度进行操作而起作用。
在你提供的例子中,似乎ySet[不幸的名称btw,因为集合是python提供的类型之一]只是一个通用的计数器,这使得更难以跟踪幕后发生的事情。
至于你的第一个例子:
>>> rows = ([1, 2, 3], [10, 20, 30])
>>> [(min([row[i] for row in rows]),max([row[i] for row in rows])) for i in range(len(rows[0]))]
[(1, 10), (2, 20), (3, 30)]
您可能希望查看zip内置函数:
>>> zip(rows[0], rows[1])
[(1, 10), (2, 20), (3, 30)]
或者为了最大限度地简洁和优雅:
>>> zip(*rows)
[(1, 10), (2, 20), (3, 30)]
HTH!

TA贡献1829条经验 获得超4个赞
的确,你是对的。这在Python语言参考的表达式部分中有详细描述。
特别注意for在单个列表理解中嵌套几个s 的顺序,它总是从左到右:
>>> matrix = [[1, 2], [3, 4]]
>>> [item for item in row for row in matrix] # oops!
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
[item for item in row for row in matrix]
NameError: name 'row' is not defined
>>> [item for row in matrix for item in row] # nesting is in left-to-right order
[1, 2, 3, 4]

TA贡献1845条经验 获得超8个赞
你没有遗漏任何东西,但这是因为你的例子不使用任何更特殊的语法,它只是两个简单的列表推导!第一个[exp for item in row]
将创建一个给定行的列表。“外部”列表理解将创建一个列表,其中每个项目是由“内部”list-comp创建的列表,一个列表用于矩阵中的每一行。
添加回答
举报