一、需求:

对一个 list 数据类型写一个循环删除的程序

二、问题

来,我们来看看代码跟效果:

# 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
datas = [0,1,2,3,4]# 打印元素组,方便比较
print(datas)#使用 for 遍历
for data in datas:# 删除 list 中的元素datas.remove(data)# 打印删除后的数组
print(datas)

我们来看这一段代码,最后的输出结果,按照我以前的经验,应该是一个空的 [] ,但结果不是:

上面的结果却告诉我们,上面的程序只删除了三个元素,并没有全部删除完,为什么呢?

从上面的结果中,我们可以看出,删除的元素是 1,3,5,从这我们可以看出,原来,是 list 在 for 循环中的索引问题,我们来实时跟踪一下 list 列表在 for 中的变化:

# 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
datas = [0,1,2,3,4]# 打印元素组,方便比较
print(datas)# 记录是第几次 for 循环
index = 1# 记录 datas 当前循环的下标值
i = 0#使用 for 遍历
for data in datas:# 打印循环次数print('\n这是第 %d 次循环,datas 当前在 for 循环中的下标值为:%d,删除前 datas 的元素为:' %(index, i))# 实时打印 datas 列表print(datas)# 删除 list 中的元素datas.remove(data)# 循环次数+1index += 1# 索引 +1i += 1# 最后的 datas 列表
print('\n循环结束,最后的 datas 的元素为:')
print(datas)

输出结果如下:

如上图可以看出,在 for 循环中 datas 没删除一个元素,它的索引都会变化,但 for 循环中遍历的索引,总会加 1 ,所以,就会出现以上这种跳过性删除的情况。

对于这种情况,想到了一个方法,我们先来看看下面的这一段程序:

# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]#使用 for 遍历
for data in datas:# 现在我们需要删除偶数的元素if data % 2 == 0:# 删除 datas 中的元素datas.remove(data)# 最后的 datas 列表
print('\n循环结束,最后的 datas 的元素为:')
print(datas)

我们来看看这段代码的运行结果:

我们可以看出,4 跟 10 是相邻着的,4 的下标是 2,10 的下标是 3,所以当 4 删除之后,datas 中下标为 2 的元素就变成了 10,但是,此时的 for 循环中,datas 的下标是 3 了,所以取不了 10 这个元素,这才导致了 10 没有被删除。

那我们要如何来删除呢?做法是这样的:

三、方法:

方法一:

# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)# 定义一个空的 list 列表,来储存要删除的 datas 的元素
datas_del = []#使用 for 遍历
for data in datas:# 现在我们需要删除偶数的元素if data % 2 == 0:# 不直接删除,将需要删除的元素,存入 datas_del 中datas_del.append(data)# 打印 datas_del 列表,查看要删除的元素
print('\n打印 datas_del 列表,查看要删除的元素')
print(datas_del)# 再执行一个 for 循环,遍历 datas_del 列表
for data in datas_del:# 删除 datas 中的元素datas.remove(data)# 最后的 datas 列表
print('\n删除后的 datas 的元素为:')
print(datas)

现在我们来执行以下上面的这段代码,是否已经可以成功的删除所要删除的元素,我们看看结果:

方法二:

# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)# 定义一个空的 list 列表,来储存要删除的 datas 的元素
datas_del = []#使用 for 遍历
#[:]作用相当于拷贝了一份
for data in datas[:]:# 现在我们需要删除偶数的元素if data % 2 == 0:# 不直接删除,将需要删除的元素,存入 datas_del 中datas.remove(data)print('\n删除后的 datas 的元素为:')
print(datas)

输出结果:

从上面的结果可知,我们已经成功的将我们所需要的元素删除了。

问题总结:一个 list 使用 for 遍历,边循环边删除的问题相关推荐

  1. java 遍历file_JAVA File类(文件的遍历,创建,删除)

    File类构造函数 File f1=new File("H://asc//");//传入文件/目录的路径 File f2=new File(f1,"test.txt&qu ...

  2. c语言删除文件 Windows,基于Windows API实现遍历所有文件并删除的方法

    本文实例讲述了基于Windows API实现遍历所有文件并删除的方法.分享给大家供大家参考.具体分析如下: 最近一直在学windows API,弄了一些好玩的东西(有点恶作剧了,请大家谨慎使用)... ...

  3. python循环遍历-for循环

    python循环遍历 for循环 append() 方法向列表的尾部添加一个新的元素. 1)循环字符串 str_1='abcde你好呀!' result=[] for i in str_1:resul ...

  4. List集合遍历for循环优化

    List集合遍历for循环优化 1. 遍历类型 2. 实现验证 1. 遍历类型 * 方法一:最常规的不加思考的写法* 优点:较常见,易于理解* 缺点:每次都要计算list.size()* 方法二:数组 ...

  5. 遍历List集合,删除符合条件的元素

    List集合的遍历有三种方式:增强for循环,普通for循环,Iterator迭代器遍历 如果只是对集合进行遍历,以上三种循环都可正常遍历: (1)增强For循环遍历List集合 List<St ...

  6. python的浮点数for循环_第33 p,for遍历,循环取值最方便

    原标题:第33 p,for遍历,循环取值最方便 大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第33篇文章,第二阶段的课程:Python基础知识:Python中的控制语句之for ...

  7. JS遍历从数组中删除指定元素

    JS遍历从数组中删除指定元素,arr为目标数组,aim为目标对比项 当每次遍历全部内容需要删除的元素不超过一个时,以下两种方法都可用,虽然结果是正确的,但是还是不推荐使用,因为没有包含数组改变后角标值 ...

  8. php利用数组循环输出,php数组遍历,php循环输出数组

    php数组遍历,php循环输出数组,PHP数组循环遍历的四种方式 [(重点)数组循环遍历的四种方式] 1,https://www.cnblogs.com/waj6511988/p/6927208.ht ...

  9. Java循环中删除一个列表元素

    本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String ...

  10. Python:用字典建立一个通讯录,向字典中添加和删除通讯人信息,查询某个人的信息,然后输出通讯录中所有人的信息。

    用字典建立一个通讯录,向字典中添加和删除通讯人(名字.电话.邮箱.工作单位等),查询某个人的信息,然后输出通讯录中所有人的信息. 采用列表里套字典的方法,比较简单 contacts = []def a ...

最新文章

  1. 微信小程序 跑马灯效果完整代码附效果图
  2. 任意1-10中的4个数字,使用加减乘除计算得出24结果的可能组合(java版),很多人小时候都玩过...
  3. 推荐10个技术圈优质的公众号大号
  4. java利用递归解决汉诺塔问题
  5. java blueprint_blueprint(蓝本/蓝图)学习笔记
  6. neo4j 增 create
  7. linux命令行终端设置tab补全文件名或路径不区分大小写(大小写不敏感)
  8. Atitit xml命名空间机制
  9. 如何以16进制打开dll文件
  10. Java中的注释方法
  11. 我,27岁,数据分析师,今年无情被辞:想给数据人提个醒!!
  12. 使用腾讯OCR进行文字识别
  13. 【万里征程——Windows App开发】使用Toast通知
  14. StringUtils字符串工具类
  15. vue点击事件添加html,vue 中拼接html时添加点击事件
  16. 青云服务器控制台系统,新版管理控制台正式上线 青云QingCloud助用户资源管理更高效...
  17. Unicode 字符串逆序
  18. java高校人员信息管理系统
  19. @5-1 CCF 2019-12-1 报数
  20. iso硬盘安装 凤凰os_系统之家ISO硬盘安装图解

热门文章

  1. 微型计算机CLD什么意思,房地产里说的CLD是什么意思
  2. MAX10片内User Flash的使用
  3. 如何修改源码(以corda为例)
  4. MongoDB入库、更新、查询效率简单测试
  5. MIT四足机器人Cheetah 3控制方案理解笔记(2)——Convex Mpc身体姿态控制
  6. 百度Apollo智能驾驶进阶课程——第三章 百度Apollo定位技术
  7. 研发效能评估体系:技术组织内的一把利剑
  8. matlab怎么导出矩阵,如何将matlab中矩阵导出到txt文件中
  9. 会议室如何实施6s管理?
  10. 操作系统期末知识点集锦及习题总结——第一章