我想了解嵌套列表理解。
下面,我列出了一个列表理解表达式及其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
这里给出的答案在理解了它的内部功能后重建了它的形式。
我想知道它是如何系统地工作的,这样我就可以把这个概念应用到其他稍微不同的例子中。
简短的回答是:是的,您的理解是正确的。
这里只有一个问题:通常在python代码中使用嵌套列表理解的方法是在多维数组上操作。
一个典型的例子是当你操作矩阵时:
正如你所看到的,“嵌套”通过操作矩阵的每个维度来工作。
在您提供的示例中,似乎
ySet
[不幸的名字btw,因为sets是python提供的类型之一]只是一个泛型计数器,这使得跟踪引擎罩下发生的事情有点困难。至于你的第一个例子:
您可能希望查看zip内置函数:
或者为了达到简洁优雅的效果:
啊!
的确,你是对的。这在Expressions section in the Python Language Reference中有详细描述。
特别要注意在一个列表理解中几个
for
的嵌套顺序,总是从左到右:相关问题 更多 >
编程相关推荐