解决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基础-流程控制
Mar 18 Python
用python找出那些被“标记”的照片
Apr 20 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python实现自动上京东抢手机
Feb 06 Python
基于Python实现的微信好友数据分析
Feb 26 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
python isinstance函数用法详解
Feb 13 Python
Python是什么 Python的用处
May 26 Python
总结Python常用的魔法方法
May 25 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
基于Python代码编辑器的选用(详解)
2017/09/13 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
大学生学期自我鉴定
2014/03/19 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
市场策划求职信
2014/08/07 职场文书
实习班主任自我评价
2015/03/11 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android