我看到这个for循环,我不太明白为什么最后一次打印是2。 为什么不是3?
a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
出:
0
1
2
2
答案 0 :(得分:20)
max_id
循环使用Sandbox mode
作为目标变量,从输入可迭代中分配每个值:
for
a[-1]
循环将for <target> in <iterable>
列表中的每个值分配给该目标for
。这种情况发生在也是是同一个列表中的最后一个元素。
所以列表随着循环中的每一步改变:
a
一次但最后一次迭代会将a[-1]
放入>>> a = [0, 1, 2, 3]
>>> for a[-1] in a:
... print a
...
[0, 1, 2, 0] # assigned a[0] == 0 to a[-1] (or a[3])
[0, 1, 2, 1] # assigned a[1] == 1 to a[-1]
[0, 1, 2, 2] # assigned a[2] == 2 to a[-1]
[0, 1, 2, 2] # assigned a[3] == 2 (since the previous iteration) to a[-1]
(或a[2]
转换为a[3]
),这就是为什么在最后一次迭代发生时,您再次看到a[-2]
。
见endpoint docs;它需要一个通用的 target_list 作为分配目标,就像seen here一样。您不仅限于分配中的简单名称,也不属于a[-1]
循环。