python:使用列表切片作为for循环的目标

Ris*_*att 8 python indexing for-loop list python-3.x

我发现这段代码片段非常有趣.

a = [0, 1, 2, 3]

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

输出如下:

[0, 1, 2, 0]
[0, 1, 2, 1]
[0, 1, 2, 2]
[0, 1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么python会这样做.是因为python试图重用索引吗?for循环以某种方式切片列表?

我们可以在迭代列表时添加或删除元素,但是当我们尝试使用索引访问变量时,它会产生奇怪的输出.

有人可以帮我理解列表中for循环和索引之间的交互吗?或者只是解释这个输出?

usr*_*301 7

它按预期工作.(对于"预期"的一些解释,至少.)

将代码重写为此代码,以防止误解a[-1]任何内容:

a = [a for a in range(0,4)]
for b in a:
    print (b)
    a[-1] = b
    print (a)
Run Code Online (Sandbox Code Playgroud)

告诉我们

0
[0, 1, 2, 0]
1
[0, 1, 2, 1]
2
[0, 1, 2, 2]
2
[0, 1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

这清楚地表明,在b 分配a[-1]被立即执行,改变列表而迭代.

四个循环执行以下操作:

  1. a[-1]设置为列表的第一个值,0.结果是现在[0,1,2,0].
  2. a[-1]设置为第二个值,1.结果(非常明显)[0,1,2,1].
  3. a[-1]设置为2,所以结果是[0,1,2,2]- 再次,只会a[-1]改变.
  4. 最后,a[-1]设置为最后一个值a,因此它实际上不会改变,最终结果是[0,1,2,2].