解决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 图片验证码代码
Dec 07 Python
Python实现的一个简单LRU cache
Sep 26 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Tensorflow之Saver的用法详解
Apr 23 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
Yii实现简单分页的方法
2016/04/29 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
jquery 模板的应用示例
2013/11/12 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
python中list循环语句用法实例
2014/11/10 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
幼儿园中秋节活动方案
2014/02/06 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
个人委托书格式
2014/04/04 职场文书
出差报告格式模板
2014/11/06 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
店铺转让协议书
2015/01/29 职场文书
面试通知邮件
2015/04/20 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python