修改正在进行遍历的列表

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值