在 python 中编写了这个函数来转置一个矩阵:
def transpose(m):
height = len(m)
width = len(m[0])
return [ [ m[i][j] for i in range(0, height) ] for j in range(0, width) ]
在这个过程中,我意识到我并不完全理解单行嵌套 for 循环是如何执行的。请通过回答以下问题帮助我理解:
- 这个 for 循环的执行顺序是什么?
- 如果我有一个三重嵌套的 for 循环,它将执行什么顺序?
- 什么等于等于未嵌套的 for 循环?
鉴于,
[ function(i,j) for i,j in object ]
- 对象必须是什么类型才能使用这个 for 循环结构?
- 将 i 和 j 分配给 object 中的元素的顺序是什么?
- 可以用不同的for循环结构来模拟吗?
- 这个 for 循环可以嵌套在类似或不同结构的 for 循环中吗?它看起来如何?
其他信息也值得赞赏。
原文由 Asher Garland 发布,翻译遵循 CC BY-SA 4.0 许可协议
最好的信息来源是 关于列表推导的官方 Python 教程。列表推导与 for 循环几乎相同(当然,任何列表推导都可以写成 for 循环),但它们通常比使用 for 循环更快。
从教程中查看这个更长的列表理解(
if
部分过滤理解,只有通过 if 语句的部分被传递到列表理解的最后部分(这里(x,y)
) :它与这个嵌套的 for 循环完全相同(并且,正如教程所说,请注意 for 和 if 的顺序如何相同)。
列表推导式和 for 循环之间的主要 区别 在于 for 循环的最后部分(你在其中做某事的地方)出现在开头而不是结尾。
关于你的问题:
一个 可迭代 的 .可以生成(有限)一组元素的任何对象。这些包括任何容器、列表、集合、生成器等。
它们的分配顺序与从每个列表生成的顺序完全相同,就好像它们在嵌套的 for 循环中一样(对于您的第一个理解,您将获得 i 的 1 个元素,然后从 j 中获得每个值,将第二个元素放入 i,然后来自 j 的每个值等)
是的,上面已经显示了。
当然可以,但这不是一个好主意。例如,这里给你一个字符列表: