循环和遍历列表
这是一个代码片段,它给出了输出: 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])
这里发生了什么是一个列表在循环过程中发生了变化。
让我们考虑下面的代码片段:
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
- (……)
- 最后一步,内部指针指向最后一个元素; 最后一个元素被自己覆盖 – 列表在最后一次迭代中不会改变; 打印元素也不会改变。
在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
,这就解释了为什么要打印两次。