解决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通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python部署web开发程序的几种方法
May 05 Python
python列表,字典,元组简单用法示例
Jul 11 Python
python3安装crypto出错及解决方法
Jul 30 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
pygame实现非图片按钮效果
Oct 29 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
flask项目集成swagger的方法
Dec 09 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python文件与路径操作神器 pathlib
Apr 01 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
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
解决python线程卡死的问题
2019/02/18 Python
python编写计算器功能
2019/10/25 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
如何利用python生成MD5并去重
2020/12/07 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
J2EE包括哪些技术
2016/11/25 面试题
副总经理岗位职责范本
2014/09/30 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
数学备课组工作总结
2015/08/12 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL