理解嵌套列表理解[重复]
- 2025-01-14 08:50:00
- admin 原创
- 115
问题描述:
我想理解嵌套列表推导。下面,我列出了列表推导表达式及其 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)
我问过一个类似的问题,关于复杂列表理解的等效 for 循环表达式,
那里给出的答案在理解了它的内部功能后重建了形式。
我想知道它是如何系统地工作的,这样我就可以将这个概念应用到其他略有不同的例子中。
解决方案 1:
确实,您说得对。Python语言参考中的表达式部分对此进行了详细描述。
请特别注意单个列表推导中几个 s 的嵌套顺序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]
解决方案 2:
简短的回答是:是的,你的理解是正确的。
只有一个问题:在 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
[不幸的名字,因为集合是 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)]
呼呼!
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD