鱼C论坛

 找回密码
 立即注册
查看: 4926|回复: 33

[已解决]求助:关于For循环嵌套的理解

[复制链接]
发表于 2018-8-3 21:21:36 | 显示全部楼层 |阅读模式
10鱼币
例如:代码

list1 = []
for x in range(10):                    #循环1
    for y in range(10):                #循环2
        if x%2 == 0:
            if y%2 != 0:
                list1.append((x, y))

不懂for循环嵌套是如何运行的,这种代码有运行顺序吗?是从“上到下”还是”由内而外“的运行
是否将循环1运行完之后再运行循环2,最好能有详细的运行顺序,先运行什么后运行什么,为什么这样的运行?

不胜感激!
最佳答案
2018-8-3 21:21:37
xue11 发表于 2018-8-17 10:33
为什么X 跑一次,y 就要跑十次呢,什么原理啊

那么多人回复了,还没解决?试试
for x in range(10):
    print(x)
结果会是 0 ~ 9,共有 10 个

循环要跑到循环体的最后一个指令才算完。有缩进的就是一个大体,我加上大括号让你理解一下,这不是python 的语法

for x in range(10)
{
    for y in range(10)
    {
          .......
    }  # y 结束
}  # x 结束

看一见得 y 是在 x 的内部。y 完成了它的工作,才会到 x 循环体的末端,x 才算完成一次。因为 x 要执行 10 次,所以 y 共执行了 100 次

如果问题得以解决,请记得采纳最佳答案哦~~

最佳答案

查看完整内容

那么多人回复了,还没解决?试试 for x in range(10): print(x) 结果会是 0 ~ 9,共有 10 个 循环要跑到循环体的最后一个指令才算完。有缩进的就是一个大体,我加上大括号让你理解一下,这不是python 的语法 for x in range(10) { for y in range(10) { ....... } # y 结束 } # x 结束 看一见得 y 是在 x 的内部。y 完成了它的工作,才会到 x 循环体的末端,x 才算完成一次。因为 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:21:37 | 显示全部楼层    本楼为最佳答案   
xue11 发表于 2018-8-17 10:33
为什么X 跑一次,y 就要跑十次呢,什么原理啊

那么多人回复了,还没解决?试试
for x in range(10):
    print(x)
结果会是 0 ~ 9,共有 10 个

循环要跑到循环体的最后一个指令才算完。有缩进的就是一个大体,我加上大括号让你理解一下,这不是python 的语法

for x in range(10)
{
    for y in range(10)
    {
          .......
    }  # y 结束
}  # x 结束

看一见得 y 是在 x 的内部。y 完成了它的工作,才会到 x 循环体的末端,x 才算完成一次。因为 x 要执行 10 次,所以 y 共执行了 100 次

如果问题得以解决,请记得采纳最佳答案哦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:32:38 From FishC Mobile | 显示全部楼层
循环嵌套是由内而外执行的,内部循环2执行完一圈,外部循环1递增1……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:36:59 | 显示全部楼层
x 跑一次,y 跑十次。

一样,都是由上往下的。如果遇到循环,就会回到循环的开头。x 被执行后,遇到 y ,所以要等到 y 跑完(十次),x 才跑一次。而 x 需要跑十次。所以 y 会跑一百次。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
xzx1 + 5 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:48:28 | 显示全部楼层
你这个循环是先将X在0--9 的范围内,  在 X == 1  的时候, 去循环y 在0--9的10个数,然后在在list1 里以(0, 1).....(9, 9)的方式进行添加,指导X 循环完 0 -- 9  的十次.
       X                   y
       0                   0,1, 2, 3, 4, 5, 6, 7, 8, 9
       1                   0,1, 2, 3, 4, 5, 6, 7, 8, 9
就是以这种方式,  望对楼主有帮助.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:50:20 | 显示全部楼层
这个很简单
你只要把代码输到python中  你就知道怎么运行
for x in range(3):
     print('当前x为:%d' % x)
       for y in range(3):
         print('当前y为:%d' % y)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 22:50:27 | 显示全部楼层
1、楼主首先要明白for循环的规则,在for x in range(10)结构中,其意思是在for后面的语句段会循环运行10次,在第一次时,x=0,第二次时x=1...第10次时x=9.
2、在第一次x=0时,运行for后面的语句是for y in range(10),同理,for y in range(10)后面的语句段也会执行10次,在第一次时,y=0,第二次时y=1...第10次时y=9.
3、综合来理解,就是x=0时,y=0到9执行10次,x=1时,y=0到9执行10次。。。。x=9时,y=0到9执行10次
4、每次执行的函数段是:
  1. if x%2 == 0:
  2.             if y%2 != 0:
  3.                 list1.append((x, y))
复制代码

所以每次都会去判断x是否为偶数,如果为偶数,y是否为奇数,两个条件成立,就把这对(x,y)放到list里;
5、综上,此程序的作用是,在0-9的范围内,打印出x是偶数,y是奇数的数据组合

以上,希望能帮到楼主
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-4 01:06:36 | 显示全部楼层
for循环就是从头到位访问一遍元素吧。。
第一层那里的for循环 访问一个元素的。第二个for循环就会每个元素都访问一遍。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-4 11:25:18 | 显示全部楼层
X执行一次,Y就执行十次;
X=1时,Y跑十圈;......X=10时,Y跑十圈。----->10*10----->n*n----->n^2;
所以时间复杂度为O(n^2)由此得来。

希望以上能帮到楼主!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-4 21:09:37 | 显示全部楼层
>>> list1
[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
结果说话,上面的意思简间来说就是x跑一次,y就跑十次。这样一直循环直到都跑完。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-9 16:27:33 | 显示全部楼层
循环1运行1次,进入内部循环,然后循环2运行10次;
之后再返回外部循环,继续循环1运行1次,进入内部循环,,,,,,
一直到循环1进行10次
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-10 16:50:37 | 显示全部楼层
先运行循环2,跑10遍之后再跑一遍循环1,因为内部循环的完整迭代才会使得外部循环迭代一次。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-10 20:47:26 | 显示全部楼层
万事笔通 发表于 2018-8-3 21:50
这个很简单
你只要把代码输到python中  你就知道怎么运行
for x in range(3):

你这代码缩进不正确哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-10 23:09:14 | 显示全部楼层
柯毅哲 发表于 2018-8-10 20:47
你这代码缩进不正确哦

我只是贴代码的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-12 11:52:34 | 显示全部楼层
for x in range(3):
    for y in range(3):
         print(x+y)
   print('ok')
结果
   0  1  2  ok 1 2 3 ok 2 3 4  ok

这样理解,只有执行好循环后,在执行下一句
1.x=0,进入 for y in range(3)   x相对于这个函数理解为全局变量,y也是全局变量,随着循环x为0  y为0 1 2
2.for y in range(3) 结束,进入print('ok')
3.x=1,进入 for y in range(3)  ,随着循环x为1  y为0 1 2
.。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-13 16:50:55 | 显示全部楼层
嵌套循序从上往下执行一次,从里往外,外面执行一次,里面执行完所有
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-13 18:24:25 | 显示全部楼层
  1. list1 = []
  2. for x in range(10):                    #循环1
  3.     print('x=', x)
  4.     for y in range(10):                #循环2
  5.         print('y=', y)
  6.         if x%2 == 0:
  7.             if y%2 != 0:
  8.                 list1.append((x, y))
复制代码


直接打印一下就 清楚了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-13 22:37:34 | 显示全部楼层
最近我刚好在看这个,:首先你把两个if条件先去掉去理解,就相当于x的取值范围0~9,y也是0~9
二者各取一个数进行两两组合,一共10X10个结果
x=0时,以此与y=0,1,2.。。。9组合
x=1时,依次与y=0,1,2.。。。9组合


x=9时,依次与y=0,1,2,.....9组合

第一个最外面的for开始,先x=0,依次与y=0,1,2,。。。9组合(这是第二个for循环)结束后,再跳出来取x=1.。。依次类推到x=9与y组合,然后结束
总共就是100种结果

后面的if只是对100种结果进行选择,其实你把二者写到一个if里,如 if x%2==0 and y%2!;=0,结果是一样的。
希望答案对你有帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 21:25:41 | 显示全部楼层

例如:代码

list1 = []
for x in range(10):                    #循环1
    for y in range(10):                #循环2
        if x%2 == 0:
            if y%2 != 0:
                list1.append((x, y))
第一个最外面的for开始,先x=0,依次与y=0,1,2,。。。9组合(这是第二个for循环)完成第二个for循环,在x=1,x=2……x=9,依次与y=0,1,2,。。。9组合
总共就是100种结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-15 14:19:56 | 显示全部楼层
从上往下执行,循环1 执行一次,循环2执行十次,再执行循环1,一直到循环1 执行完毕(十次)。所以代码的循环次数是  循环1 执行十次,循环2执行了100次。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 13:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表