首页 > 其他 > 详细

修改正在进行遍历的列表

时间:2019-04-28 11:13:58      阅读:101      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!