Python 对于循环和遍历列表

Python 对于循环和遍历列表,python,for-loop,indexing,Python,For Loop,Indexing,下面是一段给出输出的代码:012。因为a[-1]访问列表中的数字3,所以我期望输出3。网上给出的解释是“在每次迭代中,a[-1]的值都会发生变化”,但我不太明白这是怎么回事,也不知道为什么。任何解释都很好 a = [0, 1, 2, 3] for a[-1] in a: print(a[-1]) 在a中对[-1]执行操作时,实际上要遍历列表并将当前元素的值临时存储到a[-1]中 您可以看到类似以下说明的循环: a[-1] = a[0] # a = [0, 1, 2, 0] print(

下面是一段给出输出的代码:
012
。因为
a[-1]
访问列表中的数字3,所以我期望输出
3
。网上给出的解释是“在每次迭代中,
a[-1]
的值都会发生变化”,但我不太明白这是怎么回事,也不知道为什么。任何解释都很好

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

在a中对[-1]执行
操作时,实际上要遍历列表并将当前元素的值临时存储到
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
  • (……)
  • 在最后一步,内部指针指向最后一个元素;最后一个元素被自身覆盖-列表在最后一次迭代中不会更改;打印元素也不会改变
此代码

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

a = [0, 1, 2, 3]
for i in range( len(a) ):
    a[-1] = a[i] # update last element of list(updated) with element at i'th position
    print(a[-1]) # print last element of list
输出将为0 1 2

说明:

len(a)=4,范围(len(a))=[0,1,2,3]

  • 第一个循环,当前列表=[0,1,2,3],i=0=>a[i]=a[0]=0,更新的列表=[0,1,2,0],最后一个元素a[-1]=0
  • 第二个循环,当前列表=[0,1,2,0],i=1=>a[i]=a[1]=1,更新的列表=[0,1,2,1],最后一个元素a[-1]=1
  • 第三个循环,当前列表=[0,1,2,1],i=2=>a[i]=a[2]=2,更新的列表=[0,1,2,2],最后一个元素a[-1]=2
  • 第四个循环,当前列表=[0,1,2,2],i=3=>a[i]=a[3]=2,更新的列表=[0,1,2,2],最后一个元素a[-1]=2

我从未见过这样的事情;我很想阅读这篇文章/教程/无论它是什么,显示了这个例子,你可以发布链接到它吗?还有,祝贺你的第一个问题很好!(对新用户的信任恢复了)问得好。为什么
a[-1]
甚至可以作为循环变量……这是我见过的最有趣的循环。