a=[1,2,3]
for i in a:
a.remove(i)
print(a)
上面的代码,自己想要的结果是把a列表里的数删完a=[],但是最终结果却是a=[2]
原因就是因为for循环,每次循环读取的是下标,第一次for循环,会读取a=[1,2,3]的第一个值1,然后经过a.remove(1),1被删除以后,a变成了a=[2,3]。
进行第二次for循环时,for就会读取被改变的a的列表,a=[2,3]的第二个值3,然后经过a.remove(3),3被删除后,a变成了a=[2]。
进行第三次for循环时,for就会读取被改变的a的列表,a=[2]的第三个值,但是由于列表a只有一个值,并无第三个值,所以第三次执行跳出了循环,最终得到的结果,a=[2]
这就是为什么有些人想要for循环两次,但是只循环了一次就跳出了的原因。建议大家在进行for循环时,尽量不要修改for循环的条件。
解决这个问题,用深复制就可以解决copy.deepcopy()
import copy
a=[1,2,3]
for i in copy.deepcopy(a):
a.remove(i)
print(a)