pythonfor循环遍历list_python3 list 使用 for 遍历,边循环边删除问题

今天由于要对一个 list 数据类型写一个循环删除的程序(这是小编第一次对于 list 操作),但发现一个奇异问题,来,我们来看看代码跟效果:

1 #初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素

2 datas = [0,1,2,3,4]3

4 #打印元素组,方便比较

5 print(datas)6

7 #使用 for 遍历

8 for data indatas:9

10 #删除 list 中的元素

11 datas.remove(data)12

13 #打印删除后的数组

14 print(datas)

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

1321852-20180311121126818-370999658.png

上面的结果却告诉我们,上面的程序只删除了三个元素,并没有全部删除完,为什么呢?从上面的结果中,我们可以看出,删除的元素是 1,3,5,从这我们可以看出,原来,是 list 在 for 循环中的索引问题,我们来实时跟踪一下 list 列表在 for 中的变化:

1 #初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素

2 datas = [0,1,2,3,4]3

4 #打印元素组,方便比较

5 print(datas)6

7 #记录是第几次 for 循环

8 index = 1

9

10 #记录 datas 当前循环的下标值

11 i =012

13 #使用 for 遍历

14 for data indatas:15

16 #打印循环次数

17 print('\n这是第 %d 次循环,datas 当前在 for 循环中的下标值为:%d,删除前 datas 的元素为:' %(index, i))18

19 #实时打印 datas 列表

20 print(datas)21

22 #删除 list 中的元素

23 datas.remove(data)24

25

26 #循环次数+1

27 index += 1

28

29 #索引 +1

30 i += 1

31

32 #最后的 datas 列表

33 print('\n循环结束,最后的 datas 的元素为:')34 print(datas)

输出结果如下:

1321852-20180311135457411-2107247933.png

如上图可以看出,在 for 循环中 datas 没删除一个元素,它的索引都会变化,但 for 循环中遍历的索引,总会加 1 ,所以,就会出现以上这种跳过性删除的情况。对于这种情况,小编自己想到了一个方法,我们先来看看下面的这一段程序:

1 #初始化一个 list 列表

2 datas = [1,3,4,10,5,3,7,6,9,8]3

4 #使用 for 遍历

5 for data indatas:6

7 #现在我们需要删除偶数的元素

8 if data % 2 ==0:9

10 #删除 datas 中的元素

11 datas.remove(data)12

13 #最后的 datas 列表

14 print('\n循环结束,最后的 datas 的元素为:')15 print(datas)

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

1321852-20180311140818226-1065207257.png

我们可以看出,4 跟 10 是相邻着的,4 的下标是 2,10 的下标是 3,所以当 4 删除之后,datas 中下标为 2 的元素就变成了 10,但是,此时的 for 循环中,datas 的下标是 3 了,所以取不了 10 这个元素,这才导致了 10 没有被删除。那我们要如何来删除呢?小编的做法是这样的:

1 #初始化一个 list 列表

2 datas = [1,3,4,10,5,3,7,6,9,8]3

4 #打印原数组元素,方便对比

5 print('原 datas 列表的元素为:')6 print(datas)7

8 #定义一个空的 list 列表,来储存要删除的 datas 的元素

9 datas_del =[]10

11 #使用 for 遍历

12 for data indatas:13

14 #现在我们需要删除偶数的元素

15 if data % 2 ==0:16

17 #不直接删除,将需要删除的元素,存入 datas_del 中

18 datas_del.append(data)19

20 #打印 datas_del 列表,查看要删除的元素

21 print('\n打印 datas_del 列表,查看要删除的元素')22 print(datas_del)23

24 #再执行一个 for 循环,遍历 datas_del 列表

25 for data indatas_del:26

27 #删除 datas 中的元素

28 datas.remove(data)29

30 #最后的 datas 列表

31 print('\n删除后的 datas 的元素为:')32 print(datas)

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

1321852-20180311141806707-2081084320.png

从上面的结果可知,我们已经成功的将我们所需要的元素删除了,这就是小编自己想到的方法。

注:小编觉得这个方法不好,因为多了一个 for 循环的消耗,小编认为一定还有更好的方法,待小编去询问大神之后,再来更新这篇文档,如果有各位朋友有更好的办法,也可以在评论区告诉小编 ~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值