解决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之PyUnit单元测试实例
Oct 11 Python
Python访问MySQL封装的常用类实例
Nov 11 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python3实现多线程聊天室
Dec 12 Python
python实现控制台打印的方法
Jan 12 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
python中对列表的删除和添加方法详解
Feb 24 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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 email邮箱正则
2008/10/08 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
php创建图像具体步骤
2017/03/13 PHP
PHP实现简单的计算器
2020/08/28 PHP
Javascript this指针
2009/07/30 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
英国在线泳装店:Simply Swim
2019/05/05 全球购物
2014年两会学习心得范例
2014/03/17 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
优秀教师个人总结
2015/02/11 职场文书
开除员工通知
2015/04/22 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技