zoukankan      html  css  js  c++  java
  • 修改正在进行遍历的列表

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

    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)
    
  • 相关阅读:
    1-29反射
    1-28Map简介
    1-27TreeSet简介
    1-26HashSet简介
    1-25泛型
    1-24List三个子类的特点
    1-23集合概述
    Java接口
    1-22日期类型
    简易计算器的实现
  • 原文地址:https://www.cnblogs.com/Peter2014/p/10782305.html
Copyright © 2011-2022 走看看