修改for循环中的范围变量(python)

时间:2016-03-17 03:48:51

标签: python range

我不确定为什么python会显示这种行为:

for x in range(5):
    print "Before: ",x
    if x<3:
        x-=1
    print "After:  ",x

我得到的输出为:

Before:  0
After:   -1
Before:  1
After:   0
Before:  2
After:   1
Before:  3
After:   3
Before:  4
After:   4

在第一次迭代中将它减少到-1后,我没想到它会将x的值更改为1。 或者,当我想改变范围变量的值时,有没有办法实现所需的行为?

感谢。

4 个答案:

答案 0 :(得分:3)

  

我不确定为什么python会显示这种行为

因为x每次循环重置都会重置。

如果要修改范围,首先需要将其保存到变量,然后修改

e.g。在Python2中

my_range = range(5) # [0, 1, 2, 3, 4]
for i,x in enumerate(my_range):
    print "Before: ", my_range[i]
    if x < 3:
        my_range[i] = x-1
    print "After:  ", my_range[i]

print my_range # [-1, 0, 1, 3, 4]

答案 1 :(得分:2)

Python中的for循环在开始下一次迭代时并不关心x的当前值(与大多数类C语言不同);它只记得范围内的当前位置并指定下一个值。为了能够操作循环变量,您需要使用while循环,它不会对任何变量施加任何控制(它只是评估您给出的条件)。

答案 2 :(得分:1)

for x in range(5):

与:

相同
for x in [0, 1, 2, 3, 4]:

在每个循环迭代中 x 从列表中获取一个新值,它不能用作C,C#,Java,javascript,...通常 for ,我同意@ aasmund-eldhuset, while 循环可以做得更好。

答案 3 :(得分:0)

对于python 3.6,它将起作用

GlobalScope

您将以

的身份离开
my_range = list(range(5)) # [0, 1, 2, 3, 4]
for i,x in enumerate(my_range):
    print ("Before: ", my_range[i])
    if x < 3:
       my_range[i] = x-1
    print ("After:  ", my_range[i])

print (my_range)