嵌套for循环的解释

时间:2017-10-26 09:30:41

标签: python for-loop

有人可以解释(一步一步)为什么Python(3.6)为下面的循环打印3?

n=0
for x in range(0, 2):             
    for y in range(x, 2):   
        n+=1
print(n)

输出:3

难道不是2吗?

first step: 
upper for loop: (0, 2), lower loop (0, 2), n=0+1=1
second step:
upper for loop: (1, 2), lower loop (1, 2), n=1+1=2

no third step, as (2, 2) is not executed

那么" 3"来自?

由于

2 个答案:

答案 0 :(得分:2)

您没有执行内部循环迭代;外循环的第一次迭代导致内循环迭代两次:

  • 遍历range(0, 2)x = 0
    • 遍历range(x == 0, 2)y = 0n = 1
    • 遍历range(x == 0, 2)y = 1n = 2
    • 迭代range(x == 0, 2)结束。
  • 遍历range(0, 2)x = 1
    • 遍历range(x == 1, 2)y = 1n = 3
    • 迭代range(x == 1, 2)结束。
  • 迭代range(0, 2)结束。

调试器已经明确了这一点,但您还可以添加更多print()次调用,以使更明显的事情发生:

>>> n=0
>>> for x in range(0, 2):
...     print('x =', x)
...     for y in range(x, 2):
...         print('    y =', y)
...         n+=1
...         print('    n =', n)
...
x = 0
    y = 0
    n = 1
    y = 1
    n = 2
x = 1
    y = 1
    n = 3

答案 1 :(得分:0)

对于x=0x=1,内循环运行两次。 range()不包含最终整数。

因此对于x=0,内部循环遍历y=0y=1,对于x=1,它仅迭代y=1

所以有3个增量。

如果您使用print声明,则可以看到这种情况:

n=0
for x in range(0, 2):
    print('x = {}'.format(x))
    for y in range(x, 2):
        print('y = {}'.format(y))
        n+=1
print('n = {}'.format(n))