【发布时间】:2011-12-24 09:19:38
【问题描述】:
我想了解嵌套列表理解。
下面,我列出了一个列表理解表达式及其 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]
form 可以翻译成下面这样。 (我希望我是正确的)
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上问过类似的问题
那里给出的答案在了解其内部作用后重建了表单。
我想知道它是如何系统地工作的,以便我可以将这个概念应用于其他略有不同的示例。
【问题讨论】:
-
旁注:在您的示例中,您可以使用
cols = zip(*rows)将行放入列中,之后您可以简单地为每一列使用min(col)和max(col):@987654334 @。或者在一条短线上:[(min(c), max(c)) for col in zip(*rows)]. -
如果您要编写 exp1(x,y) 而不仅仅是 exp1 ,会不会是真的,并提高清晰度?我认为这是隐含的,但想确定一下?
-
@GreenAsJade 好吧,可以,exp1 应该是表达式 1
标签: python nested list-comprehension