在`range(x)`循环中使用`for`

时间:2013-03-28 16:35:47

标签: python python-2.7


两个代码块不应该打印出类似的结果吗?为什么每次到达内部for语句时都会重新评估内部循环内的范围函数,而外循环中的范围函数只被评估一次?

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

结果
0
1
2
3
0
1
0
1
0
1个

我知道打印的前4个整数(0 - 3)是代码的结果       对于范围(x)中的j:代码,但为什么以下也会打印?
0
1
0
1
0
1
代码

x = 4
for j in range(x):
    print i
    x = 5

打印
0
1
2
3

其他信息 IDLE中的Python 2.7

5 个答案:

答案 0 :(得分:4)

函数range(x)生成[0,1,2,3,4]列表。在for循环中,您将遍历此列表。

您的代码相当于:

for j in [0,1,2,3]:
    for i in [0,1,2,3]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i

答案 1 :(得分:4)

我只能通过遍历循环的迭代来解释,所以这里是:

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

第一次通过。

x = 4
for j in [0, 1, 2, 3]
    for i in range [0, 1, 2, 3]
        print i
        x = 2

打印

0
1
2
3

现在x设置为2,但外部循环范围已经执行,因此不会重新评估。

现在代码变为:

for j in [0, 1, 2, 3]:
    for i in [0, 1]:
        print i
        x = 2

打印

0
1

这又持续了两次。

答案 2 :(得分:0)

范围(x)仅被评估一次,即当循环开始时,这就是为什么修改循环内的x没有效果。

但是,在第一个代码时钟中,你在内部将x更改为2,所以下次执行内部循环时,range只给出(0,1)。

编辑:您的第一个代码块相当于

x = 5
for i in range(x)
    print i
    x = 2

答案 3 :(得分:0)

以下是我的看法:

对于外循环的每次迭代执行内循环

x = 4
j = 0
for i in range (x):
    print(i)
    x = 2
j = 1
for i in range(x) # this x is no longer 4 but it is 2
    print(i)
    x = 2
j = 2
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2
j = 3
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2

答案 4 :(得分:-2)

j未打印,在范围(x)中的i之前在“”之前插入“ print('xx',j,'oo')”

然后更改为“ print('xx',x,'oo')

或将“对于范围(x)中的j:”更改为“对于范围(225,200,-5)中的j:”,然后在“对于范围(x)中的i:”之前加上“打印(j)”