尽量避免修改正在遍历的列表
def removeDups(L1, L2):
for e1 in L1:
if e1 in L2:
L1.remove(e1)
L1 = [1,2,3,4]
L2 = [1,2,5,6]
removeDups(L1, L2)
print('L1 =', L1)
正常的结果是L1=[3,4],但得到的结果是L1=[2,3,4]
在for循环中,Python使用一个内置计数器跟踪程序在列表中的位置,内部计数器在每次迭代结束时都会增加1,当计数器的值等于列表的当前长度时,循环终止。
所以,当L1[0]的值被删除后,L1[1]的值就会变成3而不是2,所以L1中值2没有被删除。
遍历中修改列表的方法
使用列表的复制体进行迭代,可以使用L1[:]或者list(L1)进行浅复制,如果需要复制列表内部嵌套的可变对象,需要使用copy.deepcopy()进行深复制
def removeDups(L1, L2):
for e1 in L1[:]:
if e1 in L2:
L1.remove(e1)