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

当for循环和remove一起使用会出现的问题相关推荐

  1. python for 循环中使用 remove 删除列表中的元素

    python for 循环中使用 remove 删除列表中的元素 错误的代码 # !/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- o ...

  2. List遍历remove的那些事

    在工作中经常写代码时会遇到遍历list并且过滤的一些逻辑,现在来看一下不同的遍历的优劣: case在50000的范围内过滤3和7的倍数 先看一个案例 这个是以7为倍数,看结果大家可能以为过滤没问题,大 ...

  3. List中循环删除元素

    在Java中,因为List接口有remove()这个方法,我们只需要调用remove()方法,就可以删除List中的某个元素. 但是在for循环中用remove()就不太行了 根据面向百度开发的经验, ...

  4. 在for循环List中删除元素~

    for循环可以删除集合元素吗,往往我们得到的答案有时候就是不可以,安全起见,要迭代器,包括我在阿里的开发规范里也写了这么一句话, 不要在 foreach 循环里进行元素的 remove / add 操 ...

  5. python编程问题--第二次

    本质上grp 是一个dataframe 后面接一个[] 得到 series 两个[] 得到dataframe Groupby 如果后面放as_index=False 后面就能连续添加了 不加的话  同 ...

  6. insert 语句的选择列表包含的项多于插入列表中的项_如何定义和使用Python列表(Lists)

    Python中最简单的数据集合是一个列表(list).列表是方括号内用逗号分隔的任何数据项列表.通常,就像使用变量一样,使用=符号为Python列表分配名称. 如果列表中包含数字,则不要在其周围使用引 ...

  7. 并发编程-13线程安全策略之两种类型的同步容器

    文章目录 脑图 概述 同步容器 集合接口下的同步容器实现类 Vector (线程安全性比ArrayList好一些,但并非绝对线程安全) 同步容器 线程不安全的场景 其他注意事项 Hashtable C ...

  8. java复习系列[4] - Java IO

    文章目录 Java IO IO传输 IO读写流程 IO类型 IO的访问方式 缓存IO(标准IO.传统IO) 直接IO 内存映射 总结 Java中IO与NIO的区别 Java NIO 流与缓冲 管道 为 ...

  9. python游戏编程

    前言:本人接触的第一本编程书,记录下自学历程,希望有共同爱好的朋友一起探讨,共同进步,我会在B站上发表都代码的解读,最后感谢童晶老师 第一章  python的开发环境 在python官网下载最新版本的 ...

最新文章

  1. 常用计算机主要硬件设备,个人计算机常用的输出设备41.计算机硬件的组成部分主要包括:...
  2. WPF: RenderTransform特效
  3. Spring JDBC-Spring对事务管理的支持
  4. ⅰcp经济模型_干货!来自清华小哥哥的全家桶教程——手把手教你在本地构建 Nervos AppChain...
  5. java-linux-eclipse配置
  6. 进程同步与互斥的区别
  7. python发展路线_Python进阶路径-从学徒到大师
  8. java调用sqlserver存储过程_Java中调用SQLServer存储过程示例
  9. 笨办法学 Linux 中文版 翻译完成
  10. mariadb mysql同步_MySQL/MariaDB主主数据同步配置
  11. 多元函数四则运算的一阶微分公式的存在性与性质
  12. 如何修改路由器dns服务器,怎么修改路由器DNS地址
  13. win7计算机系统更新,win7电脑版本低怎么升级?win7电脑版本低的解决方法
  14. python三引号作用是什么_python中三引号的作用(逗号的两点总结)
  15. 2017年工作总结--初出茅庐
  16. 【stm32c8t6多路舵机PWM输出】
  17. JavaScript大作业(华为手机购物网站设计与实现)
  18. 在linux安装java过程_挑战Java在Linux上安装过程分享
  19. 8年iOS架构师告诉你,为什么iOS现在不行了!
  20. 托业考试要准备什么资料【zhasite】

热门文章

  1. 四种访问修饰符---(Java版)
  2. 卷积神经网络图片放大,神经网络输入图片大小
  3. java解析zip格式压缩包
  4. android 使用FileProvider 兼容apk 在7.0版本无法安装
  5. 计世传媒集团中国CIO高峰论坛:“智变·创变”中的未来,CIO不只是CIO
  6. 徐进的信念:IE工业工程与精益生产管理的区别
  7. 谷歌翻译工具新改版,支持全球51种语言翻译功能
  8. python极坐标图定义角度范围_python-matplotlib极坐标刻度/轴标签位置
  9. 第一章——程序数据集散地:数据库
  10. os.environ()和yolov7里面随机种子设定