时间:2021-05-22
今天在学python的时候遇到一个问题,循环一个数组 指定一个数,如果数组内有相同的元素就删除。
1. 前提是不能新增内存,就在该数组内处理
nums = [0,1,2,2,3,0,4,2]val = 2for 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)2、break 直接中断循环,不再执行
l = ['a','b','c','d','e']for i in l: if i == 'c': break #break直接跳出循环,break以下代码全部不执行 print(i)3、pass 什么都不操作,接着循环
l = ['a','b','c','d','e']for i in l: #i遍历l列表中的每一个元素 if i == 'c': pass print(i)以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方欢迎留言讨论,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一.问题描述在二维数组的遍历中,我们经常使用双层for循环。在某些时候,我们并不需要遍历整个二维数组。当条件满足时就应该终止for循环。但是,直接在内层循环中b
昨天用for循环进行数组去重的时候出现的问题,首先,用双重for循环把前一个和所有后面的元素进行比较,如果相等则删除。但是,如果数组里面有三个以上连续相等的元素
pop()定义和用法pop()方法用于删除并返回数组的最后一个元素。语法arrayObject.pop()返回值arrayObject的最后一个元素。说明pop
JavaScript数组pop()方法删除数组中的最后一个元素,并返回该元素。语法array.pop();下面是参数的详细信息:NA返回值:返回从数组中删除的元
array_pop()定义和用法array_pop()函数删除数组中的最后一个元素。语法array_pop(array)参数描述array必需。规定输入的数组参