python中for循环删除时删不全的问题

上一篇 / 下一篇  2019-12-10 10:14:59 / 个人分类:python笔记

以前遇到过一次,删除列表中符合条件的元素,for循环挨个判断是否符合条件,符合就删除,删完结果发现有一个符合条件的没有删掉。

那么如果想删除某些列表中的元素,比如有一个a列表,a=[11,22,33,44,55,66,77]

删除a中的2233,应该如何做呢?

如果你这样写:

         for i in a:

         if i == 22 or i==33:

                   a.remove(i)

如果按照这样写,22被如期删掉了,但33却没有,删完的结果是:[11,33,44,55,66,77]不信你试试

为什么呢~~?请看以下分解图,假如内存中是这样的:

11

22

33

44

55

66

77

第一次循环,i指向11,条件不满足,不删除

11

22

33

44

55

66

77

第二次循环,i指向22,符合删除条件了,遂删除,则在内存中会变为:

11

33

44

55

66

77

         

注意喽,看到了嘛?现在33跑到原本22的位置上了,i现在指向了33,那么第三次循环,i就会继续向下指向44了,依次类推直到完成循环。

 

所以知道为什么上面那段代码会有问题了吧。那么怎么解决呢?

代码改成:

b=[]

for i in a:

         if i == 33 or i==44:

                   b.append(i)

for i in b:

         if i in a:

                   a.remove(i)

找一个临时列表b将要删除的东西存起来,然后再去原列表依次删


TAG: Python python for删除 删除不全

 

评分:0

我来说两句

日历

« 2024-05-01  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 4553
  • 日志数: 6
  • 建立时间: 2018-11-29
  • 更新时间: 2019-12-12

RSS订阅

Open Toolbar