博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中remove的一些坑
阅读量:5993 次
发布时间:2019-06-20

本文共 889 字,大约阅读时间需要 2 分钟。

  前几天,使用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,这里涉及到引用和深浅复制的问题,因此不在此处解答

  

转载于:https://www.cnblogs.com/lipx9527/p/9450819.html

你可能感兴趣的文章
Navicat MySql 10.1.7软件和注册码
查看>>
Nagios监控check_http~
查看>>
模仿MSN弹出对话框
查看>>
android ndk makefile 文件记录
查看>>
angularjs $routeProvider template 函数及参数解惑
查看>>
Oracle 11g R2 常见问题处理
查看>>
aliyun_api_cmd.py——在命令行调用阿里云API
查看>>
Centos下***(pptpd)的部署
查看>>
操作无法完成。键入的打印机名不正确,或者指定的打印机没有连接到服务器上的解决办法!...
查看>>
struts2的restful
查看>>
Java基础加强-代理
查看>>
linux系统中实现多网卡的绑定
查看>>
6.Java集合-LinkedList实现原理及源码分析
查看>>
SP2与R2的区别之处
查看>>
Notifyall学习笔记
查看>>
The Journey Of Success
查看>>
java调用cmd命令
查看>>
redis+spring
查看>>
【转】hibernate.hbm.xml详解
查看>>
POJ-2159(Water)
查看>>