首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >理解嵌套列表理解

理解嵌套列表理解
EN

Stack Overflow用户
提问于 2011-11-08 19:38:53
回答 1查看 78.9K关注 0票数 74

我想要理解嵌套列表的理解。下面,我列出了一个列表理解表达式和它们的for循环等效项。

我想知道我对这些问题的理解是否正确。

例如,

代码语言:javascript
复制
[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
for i in range(len(rows[0]))]

等同于

代码语言:javascript
复制
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)

如果我可以一概而论,我想

代码语言:javascript
复制
[exp2([exp1 for x in xSet]) for y in ySet]

表单可以转换为以下格式。(我希望我在这一点上是正确的)

代码语言:javascript
复制
result=[]
for y in ySet:
  innerResult =[]
  for x in xSet:
    innerResult.append(exp1)
  exp2Result = exp2(innerResult)
  result.append(exp2Result)

对于更简单的情况,

代码语言:javascript
复制
[exp1 for x in xSet for y in ySet] 

等于

代码语言:javascript
复制
result=[] 
for x in xSet:
  for y in ySet: 
    result.append(exp1)

然而,

代码语言:javascript
复制
[[exp1 for x in xSet] for y in ySet]

等于

代码语言:javascript
复制
result=[]
for y in ySet:
  innerResult=[]
  for x in xSet:
    innerResult.append(exp1)
  result.append(innerResult)

我在Equivalent for loop expression for complex list comprehension上问了一个类似的问题

那里给出的答案在理解了它的内部功能后重新构建了表单。

我想系统地了解它是如何工作的,这样我就可以将这个概念应用到其他稍微不同的示例中。

EN

回答 1

Stack Overflow用户

发布于 2011-11-08 20:32:03

的确,你是对的。这在Expressions section in the Python Language Reference中有详细的描述。

特别要注意单个列表理解中几个for的嵌套顺序,它总是从左到右的:

代码语言:javascript
复制
>>> 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]
票数 78
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8049798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档