解决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处理XML文件的方法
Aug 31 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
详解Python3的TFTP文件传输
Jun 26 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
python实现文件的备份流程详解
Jun 18 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 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调用Google translate_tts api实现代码
2013/08/07 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
php正则修正符用法实例详解
2016/12/29 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
js的三种继承方式详解
2017/01/21 Javascript
js实现一键复制功能
2017/03/16 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
编辑个人求职信范文
2013/09/21 职场文书
机械工程系毕业生求职信
2013/09/27 职场文书
体育教师工作总结的自我评价
2013/10/10 职场文书
2014年母亲节寄语
2014/05/07 职场文书
银行求职信
2014/05/31 职场文书
法人委托书范本格式
2014/09/15 职场文书
优秀教师事迹材料
2014/12/15 职场文书
于丹论语心得观后感
2015/06/15 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
centos8安装MongoDB的详细过程
2021/10/24 MongoDB