解决python 在for循环并且pop数组的时候会跳过某些元素的问题


Posted in Python onDecember 11, 2020

今天在学python的时候遇到一个问题,循环一个数组 指定一个数,如果数组内有相同的元素就删除。

1. 前提是不能新增内存,就在该数组内处理

nums = [0,1,2,2,3,0,4,2]
val = 2
for i in nums:
 if(i == val):
  idx = nums.index(i)
  nums.pop(idx)
print(nums)

一开始写成这样时候输出

[0, 1, 2, 3, 0, 4] //中间的2居然没有删除

然后我修改了一下 把每一次循环都打出来看看

0loop [0, 1, 2, 2, 3, 0, 4, 2]
1loop [0, 1, 2, 2, 3, 0, 4, 2]
2loop [0, 1, 2, 3, 0, 4, 2]//这里被跳过了
3loop [0, 1, 2, 3, 0, 4, 2]
4loop [0, 1, 2, 3, 0, 4, 2]
5loop [0, 1, 2, 3, 0, 4, 2]
6loop [0, 1, 2, 3, 0, 4]

原因是因为Python中for循环用迭代器实现,而pop方法删除了当前元素后,被删除的位置由后面的填补,而循环自动指到下一个元素,也就相当于那个2被跳过了。

网上搜的一些处理方法 比较适合这个的是用

for i in nums[:]: //在这里nums[:]相当于复制了一份,但是并不是同一份。
  if(i == val):
    idx = nums.index(i)
    nums.pop(idx)

输出

[0, 1, 3, 0, 4]

补充知识:python 中for循环(continue, break, pass)用法

1、continue 跳过当前继续执行下一个循环

l = ['a','b','c','d','e']
for i in l:    #i遍历l列表中的每一个元素
  if i == 'c':
    continue   #continue以下的代码不执行直接进入下一个循环
  print(i)

解决python 在for循环并且pop数组的时候会跳过某些元素的问题

2、break 直接中断循环,不再执行

l = ['a','b','c','d','e']
for i in l:
  if i == 'c':
    break #break直接跳出循环,break以下代码全部不执行
  print(i)

解决python 在for循环并且pop数组的时候会跳过某些元素的问题

3、pass 什么都不操作,接着循环

l = ['a','b','c','d','e']
for i in l:  #i遍历l列表中的每一个元素
  if i == 'c':
    pass
  print(i)

解决python 在for循环并且pop数组的时候会跳过某些元素的问题

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方欢迎留言讨论,望不吝赐教。

Python 相关文章推荐
python self,cls,decorator的理解
Jul 13 Python
跟老齐学Python之重回函数
Oct 10 Python
python操作gmail实例
Jan 14 Python
Python 备份程序代码实现
Mar 06 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
Python连接mysql方法及常用参数
Sep 01 Python
如何用python反转图片,视频
Apr 24 Python
基于Python中Remove函数的用法讨论
Dec 11 #Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 #Python
Python文件名匹配与文件复制的实现
Dec 11 #Python
Python: glob匹配文件的操作
Dec 11 #Python
Python Socket多线程并发原理及实现
Dec 11 #Python
python 实现Harris角点检测算法
Dec 11 #Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 #Python
You might like
PHP PDO函数库详解
2010/04/27 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
强制设为首页代码
2006/06/19 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
高中生家长会演讲稿
2014/01/14 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
消防应急演练方案
2014/02/12 职场文书
交通事故私了协议书
2014/04/16 职场文书
难忘的一天教学反思
2014/04/30 职场文书
运动会演讲稿300字
2014/08/25 职场文书
罗马假日观后感
2015/06/08 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript