我不确定为什么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。 或者,当我想改变范围变量的值时,有没有办法实现所需的行为?
感谢。
答案 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)