python中for + remove的坑

谁借莪1个温暖的怀抱¢ 2022-12-08 14:12 198阅读 0赞

假如有个集合[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’],然后使用for循环去遍历,然后指定删除c跟d,运行后你会发现只删除掉了c,并没有删除掉d,这是为什么呢?

查了资料发现,是for循环的问题。因为for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化。
举个例子:

第一次循环,循环索引为0,此时索引为0的元素是a,不满足条件。集合为[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’]
第二次循环,循环索引为1,此时索引为1的元素是b,不满足条件。集合为[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’]  
第三次循环,循环索引为2,此时索引为2的元素是c,满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’] 
第四次循环,循环索引为3,此时索引为3的元素是e,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]  
第五次循环,循环索引为4,此时索引为4的元素是f,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’] 
第六次循环,循环索引为5,此时索引为5的元素是g,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]

解决办法

  1. lst=['a', 'b', 'c', 'd', 'e', 'f', 'g']
  2. while True:
  3. for i in lst:
  4. if i==c or i == d:
  5. lst.remove(i)
  6. #如果删除了元素,退出此次遍历,开始遍历新列表
  7. break
  8. else:
  9. break
  10. print(lst)

结果[‘a’, ‘b’,’ e’, ‘f’, ‘g’]

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python3 for循环踩过

    最近在用python练习写点爬虫,想着把双色球的历史记录爬下来存入mysql中,爬取数据没有遇到什么问题,在处理数据存入数据库的时候遇到问题了,现把问题整理出来方便自己日后查询