解决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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
详解python中递归函数
Apr 16 Python
Django框架验证码用法实例分析
May 10 Python
python中while和for的区别总结
Jun 28 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python的形参和实参使用方式
Dec 24 Python
pycharm安装及如何导入numpy
Apr 03 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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
深入了解php4(2)--重访过去
2006/10/09 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
Javascript Objects详解
2014/09/04 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
js中开关变量使用实例
2017/02/24 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python同时处理多个异常的方法
2020/07/28 Python
举例讲解Python装饰器
2020/12/24 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
法国珠宝店:CLEOR
2017/01/29 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
行政求职信
2014/07/04 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
护理培训心得体会
2016/01/22 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
mysql sock文件存储了什么信息
2022/07/15 MySQL