• python中remove的一些坑


      前几天,使用python时遇到这么一个需求,删除一个列表中值为1的元素。我寻思着使用remove方法,但是remove方法只会删除第一个,于是我使用for循环去删除。代码和运行结果如下:

      当时这个结果让我很懵逼,为什么1没有被删除完?查了资料发现,是for循环捣的鬼。因为for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化。这里来具体分析一下这段代码:

      第一次循环,循环索引为0,此时索引为0的元素是1,满足条件,因此mylist中的第一个1被删除,此时mylist变为[1,2,1,1,3,4];

      第二次循环,循环索引为1,此时新列表中,索引为1的元素是2,不满足条件,mylist仍然为[1,2,1,1,3,4];

      第三次循环,循环索引为2,此时列表中,索引为2的元素是1,满足条件,remove方法会再次删除一个1,但是remove会删除第一次出现的1(即删除索引为0的那个1),因此列表变为[2,1,1,3,4];

      第四次循环,循环索引为3,新列表中,索引为3的元素是3,不满足条件,mylist仍然为[2,1,1,3,4];

      第五次循环,循环索引为4,此时列表中,索引为4的元素是4,不满足条件,mylist仍然为[2,1,1,3,4];

      此时,由于新列表长度为5,于是循环结束。

       下面的截图结果能够很直观的看出来。

      至此,如果是这样的一段代码,结果应该是怎样?

      最终mylist=['b','d'],怎么样,和你计算的值是否一样?

      回到最初的需求,要怎样才能删除所有的1,这里可以使用deepcopy来复制一份,之后一个列表用于循环,一个用于移除值。代码和结果如下:

      这样就可以实现删除列表中的所有值为1的元素。这里可能有人会问,为什么不直接将l1赋值给一个变量,即l2=l1,这里涉及到引用和深浅复制的问题,因此不在此处解答

      

  • 相关阅读:
    Daily Scrum02 12.05
    Daily Scrum02 12.04
    用户调研报告
    Daily Scrum02 12.03
    Daily Scrum02 12.02
    Daily Scrum02 12.01
    Daily Scrum02 11.30
    软件工程项目组Z.XML会议记录 2013/11/27
    Daily Scrum02 11.29
    201509-3 模板生成系统
  • 原文地址:https://www.cnblogs.com/lipx9527/p/9450819.html
Copyright © 2020-2023  润新知