首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单行嵌套For循环

单行嵌套For循环
EN

Stack Overflow用户
提问于 2013-06-09 13:08:32
回答 3查看 281.2K关注 0票数 121

用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 ]

为了使用这个structure?

  • What循环,对象必须是什么类型?

  • 可以用不同的for循环来模拟吗?这个for循环可以嵌套在类似或不同的for循环结构中吗?它看起来会是什么样子呢?

更多的信息也是值得感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-09 13:26:17

最好的信息来源是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循环的最后一部分(在这里您要做一些事情)是在开始而不是结束。

关于你的问题:

为了使用这个

循环结构,对象必须是什么类型?

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

将i和j分配给object中的元素的顺序是什么?

它们的赋值顺序与从每个列表中生成它们的顺序完全相同,就好像它们是嵌套在一个for循环中一样(对于您的第一个理解,您应该为i获取1个元素,然后从j获取每个值,然后将第二个元素赋给i,然后从j获取每个值,依此类推)。

可以用不同的for循环结构来模拟吗?

是的,上面已经显示了。

这个for循环可以嵌套在类似或不同的for循环结构中吗?那会是什么样子呢?

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

[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]
票数 202
EN

Stack Overflow用户

发布于 2020-04-27 14:37:25

通过使用zip函数,可以在同一行中使用两个for循环

代码:

list1 = ['Abbas', 'Ali', 'Usman']
list2 = ['Kamran', 'Asgar', 'Hamza', 'Umer']
list3 = []
for i,j in zip(list1,list2):
    list3.append(i)
    list3.append(j)
print(list3)

输出:

['Abbas', 'Kamran', 'Ali', 'Asgar', 'Usman', 'Hamza']

因此,通过使用zip函数,我们可以使用两个for循环,也可以迭代同一行中的两个列表。

票数 1
EN

Stack Overflow用户

发布于 2019-09-17 14:08:37

下面的代码是嵌套循环的最佳示例,当使用两个for循环时,请记住第一个循环的输出是第二个循环的输入。在使用嵌套循环时,循环终止也很重要

for x in range(1, 10, 1):
     for y in range(1,x):
             print y,
        print
OutPut :
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17006641

复制
相关文章

相似问题

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