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]
甚至可以作为循环变量……这是我见过的最有趣的循环。