解决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自动连接ssh的方法
Mar 07 Python
使用Python的turtle模块画图的方法
Nov 15 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
Laravel find in set排序实例
2019/10/09 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
详解Python当中的字符串和编码
2015/04/25 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
python模块常用用法实例详解
2019/10/17 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
军训 自我鉴定
2014/02/03 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
留学推荐信中文范文
2015/03/26 职场文书
二胎满月酒致辞
2015/07/29 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技