解决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代码真的很爽
Aug 26 Python
Python实现的下载8000首儿歌的代码分享
Nov 21 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
python中metaclass原理与用法详解
Jun 25 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python基于Tkinter编写crc校验工具
May 06 Python
用Python创建简易网站图文教程
Jun 11 Python
python中validators库的使用方法详解
Sep 23 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP操作xml代码
2010/06/17 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JavaScript中URL编码函数代码
2011/01/11 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
简述vue中的config配置
2018/01/23 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
vue配置接口域名方法总结
2019/05/12 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
计算机应用专业毕业生求职信
2014/06/03 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
运动会入场词
2015/07/18 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
Redis实现一个账号只能登录一个设备
2022/04/19 Redis