这是一段代码,它给出了输出:0 1 2 2
.3 3 3 3
自从a[-1]
访问列表中的数字3 以来,我原本期望输出.在线解释说" a[-1]
每次迭代的变化值",但我不太明白如何或为什么.任何解释都会很棒!
a = [0, 1, 2, 3] for a[-1] in a: print(a[-1])
Delgan.. 34
在执行操作时for a[-1] in a
,您实际上遍历列表并临时存储当前元素的值a[-1]
.
你可以像这些说明一样看到循环:
a[-1] = a[0] # a = [0, 1, 2, 0] print(a[-1]) # 0 a[-1] = a[1] # a = [0, 1, 2, 1] print(a[-1]) # 1 a[-1] = a[2] # a = [0, 1, 2, 2] print(a[-1]) # 2 a[-1] = a[3] # a = [0, 1, 2, 2] print(a[-1]) # 2
所以,当你在第三个元素上时,则2
存储到a[-1]
(哪个值是1
,但是在开始0
之前和3
之后).
最后,当涉及到的最后一个元素(和迭代结束),存储到的最后一个值a[-1]
是2
这可以解释为什么它被印刷两次.
在执行操作时for a[-1] in a
,您实际上遍历列表并临时存储当前元素的值a[-1]
.
你可以像这些说明一样看到循环:
a[-1] = a[0] # a = [0, 1, 2, 0] print(a[-1]) # 0 a[-1] = a[1] # a = [0, 1, 2, 1] print(a[-1]) # 1 a[-1] = a[2] # a = [0, 1, 2, 2] print(a[-1]) # 2 a[-1] = a[3] # a = [0, 1, 2, 2] print(a[-1]) # 2
所以,当你在第三个元素上时,则2
存储到a[-1]
(哪个值是1
,但是在开始0
之前和3
之后).
最后,当涉及到的最后一个元素(和迭代结束),存储到的最后一个值a[-1]
是2
这可以解释为什么它被印刷两次.
这里发生的是列表在循环期间发生变异.
让我们考虑以下代码片段:
a = [0, 1, 2, 3] for a[-1] in a: print a
输出是:
[0, 1, 2, 0] [0, 1, 2, 1] [0, 1, 2, 2] [0, 1, 2, 2]
每次迭代:
从内部指针当前指向的位置读取值
立即将其分配给列表中的最后一个元素
在最后一个元素打印在标准输出之后
它就像:
内部指针指向第一个元素,它为0,最后一个元素被该值覆盖; 清单是[0, 1, 2, 0]
; 印刷价值是0
内部指针指向第二个元素,它是1,最后一个元素被该值覆盖; 清单是[0, 1, 2, 1]
; 印刷价值是1
(......)
最后一步,内部指针指向最后一个元素; 最后一个元素被自己覆盖 - 列表在最后一次迭代时不会改变; 印刷元素也不会改变.