我想要理解嵌套列表的理解。下面,我列出了一个列表理解表达式和它们的for循环等效项。
我想知道我对这些问题的理解是否正确。
例如,
[(min([row[i] for row in rows]),max([row[i] for row in rows]))
for i in range(len(rows[0]))]
等同于
result=[]
for i in range(len(rows[0])):
innerResult=[]
for row in rows:
innerResult.append(row[i])
innerResult2=[]
for row in rows:
innerResult2.append(row[i])
tuple=(min(innerResult), max(innerResult2))
result.append(tuple)
如果我可以一概而论,我想
[exp2([exp1 for x in xSet]) for y in ySet]
表单可以转换为以下格式。(我希望我在这一点上是正确的)
result=[]
for y in ySet:
innerResult =[]
for x in xSet:
innerResult.append(exp1)
exp2Result = exp2(innerResult)
result.append(exp2Result)
对于更简单的情况,
[exp1 for x in xSet for y in ySet]
等于
result=[]
for x in xSet:
for y in ySet:
result.append(exp1)
然而,
[[exp1 for x in xSet] for y in ySet]
等于
result=[]
for y in ySet:
innerResult=[]
for x in xSet:
innerResult.append(exp1)
result.append(innerResult)
我在Equivalent for loop expression for complex list comprehension上问了一个类似的问题
那里给出的答案在理解了它的内部功能后重新构建了表单。
我想系统地了解它是如何工作的,这样我就可以将这个概念应用到其他稍微不同的示例中。
发布于 2011-11-08 20:32:03
的确,你是对的。这在Expressions section in the Python Language Reference中有详细的描述。
特别要注意单个列表理解中几个for
的嵌套顺序,它总是从左到右的:
>>> 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]
https://stackoverflow.com/questions/8049798
复制相似问题