修改正在进行遍历的列表

尽量避免修改正在遍历的列表

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)
原文地址:https://www.cnblogs.com/Peter2014/p/10782305.html