解决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使用Socket(Https)Post登录百度的实现代码
May 18 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
Python如何判断数独是否合法
Sep 08 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
利用python 读写csv文件
Sep 10 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
《PHP编程最快明白》第三讲:php数组
2010/11/01 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php封装一个异常的处理类
2017/06/08 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
《乌塔》教学反思
2014/02/17 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
会计实训总结范文
2015/08/03 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL