gpt4 book ai didi

python - 单行嵌套 For 循环

转载 作者:IT老高 更新时间:2023-10-28 21:11:48 24 4
gpt4 key购买 nike

在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 循环是如何执行的。请回答以下问题帮助我理解:

  1. 这个for循环的执行顺序是什么?
  2. 如果我有一个三重嵌套的 for 循环,它会执行什么顺序?
  3. 什么等于未嵌套的 for 循环?

给定,

[ function(i,j) for i,j in object ]
  1. 对象必须是什么类型才能使用这个 for 循环结构?
  2. 将 i 和 j 分配给 object 中的元素的顺序是什么?
  3. 可以用不同的for循环结构来模拟吗?
  4. 这个 for 循环可以嵌套在类似或不同结构的 for 循环中吗?它会是什么样子?

我们也非常感谢您提供其他信息。

最佳答案

最好的信息来源是official Python tutorial on list comprehensions .列表推导与 for 循环几乎相同(当然,任何列表推导都可以写成 for 循环),但它们通常比使用 for 循环更快。

从教程中查看这个更长的列表推导(if 部分过滤推导,只有通过 if 语句的部分被传递到列表推导的最后部分(此处为 ( x,y)):

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

这与这个嵌套的 for 循环完全相同(并且,正如教程所说,请注意 for 和 if 的顺序如何相同)。

>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

列表推导式和 for 循环之间的主要区别在于 for 循环的最后部分(您在其中执行某项操作)位于开头而不是结尾。

关于您的问题:

What type must object be in order to use this for loop structure?

iterable .可以生成(有限)一组元素的任何对象。这些包括任何容器、列表、集合、生成器等。

What is the order in which i and j are assigned to elements in object?

它们的分配顺序与从每个列表生成的顺序完全相同,就好像它们在嵌套的 for 循环中一样(对于您的第一个理解,您将获得 i 的 1 个元素,然后是 j 的每个值,第二个元素进入 i,然后来自 j 的每个值,等等)

Can it be simulated by a different for loop structure?

是的,上面已经显示了。

Can this for loop be nested with a similar or different structure for loop? And how would it look?

当然可以,但这不是一个好主意。例如,这里给你一个字符列表:

[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]

关于python - 单行嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com