循环语句很奇怪

lim*_*ess 8 python for-loop

我看到这个for循环,我不太明白为什么最后一个打印是2.为什么它不是3?

a = [0, 1, 2, 3]

for a[-1] in a:
    print(a[-1])
Run Code Online (Sandbox Code Playgroud)

出:

0
1
2
2
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 20

for循环使用a[-1]作为目标变量,分配从输入可迭代的每个值:

for <target> in <iterable>
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

一次但最后一次迭代将put a[2]放入a[3](或a[-2]放入a[-1]),这就是为什么,当最后一次迭代发生时,你2 再次看到.

for循环语法 ; 它需要一个通用的target_list作为赋值目标,就像一个assigment语句.您不仅限于分配中的简单名称,也不会处于for循环中.