对于列表中的n:del n

Air*_*Air 2 python scope loops

当我遍历列表时,我在循环中给列表元素的名称显然直接指向每个元素,如下所示:

>>> a = [1, 2, 3]
>>> for n in a:
...     print n is a[a.index(n)]
True
True
True
Run Code Online (Sandbox Code Playgroud)

所以,纯粹出于好奇,为什么这似乎没有做任何事情?

>>> for n in a: del n
>>> a
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

如果我尝试del a[a.index(n)],我会得到不稳定的行为,但至少它是我能理解的行为 - 每次我删除一个元素,我缩短列表,更改其他元素的索引,所以我最终删除列表中的每个其他元素:

>>> a = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for n in a: del a[a.index(n)]
>>> a
[1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)

很明显,我可以在迭代时从列表中删除.那么当我尝试del n进入循环时会发生什么?有什么东西被删除了?

再说一次:纯粹是出于好奇.收起你的干草叉.

Dol*_*000 7

在任何for n in X语句的块内,n引用名为nself 的变量,而不是"你迭代的最后一个值列表中的位置"的任何概念.因此,循环正在做的是将变量重复绑定n到从列表中获取的值,然后再次立即取消绑定该变量.该del n语句仅影响本地变量绑定,而不是列表.