我知道在迭代时修改可能会造成灾难。我好奇,所以我尝试了。在下面的前几种情况下,事情按预期进行。但是倒数第二个发生了什么?为什么存在第五个零(最后一个)会导致较早的零被删除?
>>> A = [0, 0, 0, 0]
>>> for k in A:
if k == 0:
A.remove(k)
>>> A
[0, 0]
>>> A = [0, 0, 0, 0, 1]
>>> for k in A:
if k == 0:
A.remove(k)
>>> A
[0, 0, 1]
>>> A = [0, 0, 0, 0, 1, 1]
>>> for k in A:
if k == 0:
A.remove(k)
>>> A
[0, 0, 1, 1]
>>> A = [0, 0, 0, 0, 1, 1, 0]
>>> for k in A:
if k == 0:
A.remove(k)
>>> A
[0, 1, 1, 0]
>>> A = [0, 0, 0, 0, 1, 1, 2]
>>> for k in A:
if k == 0:
A.remove(k)
>>> A
[0, 0, 1, 1, 2]
编辑! somelist.remove(x)删除第一次出现的x。知道这一点,但完全忘记了它。
答案 0 :(得分:0)
我不是Python专家,但就在我想象如何实现foreach循环时:
len = size(array)
for i in range(0, len):
loop_body(array[i])
然后是第二个例子:
len = 5,array = [0,0,0,0,1]
第一次迭代:i = 0,array = [0,0,0,0,1],数组[0]中的零被删除。
第二次迭代:i = 1,数组= [0,0,0,1],数组[1]中的零被删除。
第三次迭代:i = 2,数组= [0,0,1],数组[2] == 1,没有任何反复发生。
这是你的结果。最后一个也一样。
答案 1 :(得分:0)
remove方法会删除x的第一个。所以当我执行这段代码时:
>>> A = [0, 0, 0, 0, 1, 1, 0]
>>> for k in A:
if k == 0:
A.remove(k)
最后存在零,导致另一个零(前面的一个在迭代时被跳过)被删除。这产生了:
>>> A
[0, 1, 1, 0]
而不是我预期的输出:
>>> A
[0, 0, 1, 1, 0]