以下是一段代码,其中提供了输出:0 1 2 2
。由于3 3 3 3
访问列表中的数字3,我原本期望输出a[-1]
。在线解释说" a[-1]
的值在每次迭代中发生变化"但我不太明白如何或为什么。任何解释都会很棒!
a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
答案 0 :(得分: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
,这解释了为什么它被打印两次。
答案 1 :(得分:15)
这里发生的是列表在循环期间发生变异。
让我们考虑以下代码段:
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, 1, 2, 0]
;打印值为0
[0, 1, 2, 1]
;打印值为1
答案 2 :(得分:0)
此代码
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 2
说明:
len(a)= 4,范围(len(a))= [0,1,2,3]