首页 > 解决方案 > .remove 方法在 python 中有何不同?

问题描述

a = [(1, 1), (35, 1), (1, 35), (35,35)]

for i in a:
    print(i)

然后它打印

(1, 1)
(35, 1)
(1, 35)
(35, 35)

然而这段代码,虽然我期待同样的结果

a = [(1, 1), (35, 1), (1, 35), (35,35)]

for i in a:
   a.remove(i)
   print(i)

那么结果是

(1, 1)
(1, 35)

该方法如何.remove产生这种差异?我不知道它是如何工作的。请帮我!

标签: python-3.xlist

解决方案


.remove有所不同,因为您在迭代时更新迭代器。

想象 i成一个指针,它指向0th 的索引a并一直到 . 的末尾length(a)。(这里,length(a)它本身正在改变)。

所以你的代码是这样的:

a = [1, 2, 3, 4]

for i in a:
    a.remove(i)
    print(i)

所以在内部,i被初始化为指向第一次迭代中的0第 th 索引。a

在下一次迭代中,i自动初始化为指向 (如果存在)的1st 索引a

在下一次迭代中,iis 自动初始化为指向(如果存在)的第2nd 索引,依此类推......a

所以这是循环中发生的事情:

迭代 1

a = [1, 2, 3, 4]
i -> 0th index of a = 1

a.remove(i)
a -> [2, 3, 4]

print(i) -> prints 1

迭代 2

a = [2, 3, 4]
i -> 1st index of a = 3

a.remove(i)
a -> [2, 4]

print(i) -> prints 3

迭代 3

a = [2, 4]
i -> 2nd index of a = Does not exist -> Quit iteration 

正因为如此,如果你运行上面的程序,只有13才会被打印出来。


推荐阅读