解决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文件夹与文件的操作实现代码
Jul 13 Python
Python文件去除注释的方法
May 25 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
python爬虫实战之最简单的网页爬虫教程
Aug 13 Python
python基本语法练习实例
Sep 19 Python
Sanic框架流式传输操作示例
Jul 18 Python
Python socket实现的简单通信功能示例
Aug 21 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
Python批量启动多线程代码实例
Feb 18 Python
python批量修改xml属性的实现方式
Mar 05 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 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 实现explort() 功能的详解
2013/06/20 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
jquery中动态效果小结
2010/12/16 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
python利用拉链法实现字典方法示例
2017/03/25 Python
python可视化实现KNN算法
2019/10/16 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
信息管理与信息系统专业求职信
2014/06/21 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
英语教师个人总结
2015/02/09 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
python多次执行绘制条形图
2022/04/20 Python