a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
输出结果为 0 1 2 2
为什么每次迭代a[-1]
都会改变?
a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
输出结果为 0 1 2 2
为什么每次迭代a[-1]
都会改变?
您的代码相当于:
a[-1] = a[0]
print(a[-1])
a[-1] = a[1]
print(a[-1])
a[-1] = a[2]
print(a[-1])
a[-1] = a[3]
print(a[-1])
每次循环时,它将当前列表元素的值分配给a[-1]
,然后打印出来。
当您进行迭代时,您正在更改a[-1]
的值。 迭代变量是可迭代对象中对象的引用。
lst = [[1, 2], [3, 4]]
# ---> Iterating variable
# |
for val in lst:
val.append(55)
print(lst)
# [[1, 2, 55], [3, 4, 55]]
因为 a
是你正在迭代的对象的引用。
在您的情况下,您的迭代变量是 a[-1]
本身。所以,您不断地改变 a[-1]
。您可以通过在此处添加 print(...)
语句来进行调试。
a = [0, 1, 2, 3]
for a[-1] in a:
print(a)
[0, 1, 2, 0] # a[-1] == a[0]
[0, 1, 2, 1] # a[-1] == a[1]
[0, 1, 2, 2] # a[-1] == a[2]
[0, 1, 2, 2] # a[-1] == a[3]
第一个a[-1]
(也就是a[3])是一个变量,你可以将从a
中提取的值赋给它。在倒数第二次迭代中,它设置了a[-1] = a[2]
,即2
。在最后一次迭代中,你提取的是a[3]
,它现在的值是2
。