解决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 GAE、Django导出Excel的方法
Nov 24 Python
Python实现的简单万年历例子分享
Apr 25 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
Python爬取12306车次信息代码详解
Aug 12 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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查看session内容的函数
2008/08/27 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php获得url参数中具有&的值的方法
2014/03/05 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
python获取糗百图片代码实例
2013/12/18 Python
Python制作简易注册登录系统
2016/12/15 Python
简单了解python模块概念
2018/01/11 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
红楼梦读书笔记
2015/06/25 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python