小编典典

for循环和遍历列表

python

以下是提供输出的代码段:0 1 2 23 3 3 3由于a[-1]访问列表中的数字3,我期望获得输出。在线给出的解释是“a[-1]每次迭代中更改的价值”,但我不太了解如何或为什么。任何解释都很好!

a = [0, 1, 2, 3]
for a[-1] in a:
    print(a[-1])

阅读 238

收藏
2020-12-20

共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
  • (…)
  • 在最后一步,内部指针指向最后一个元素;last元素被其自身覆盖-列表在上一次迭代时不会更改;打印的元素也不会改变。
2020-12-20