错误示范:

 class Solution:
def removeElement(self, nums, val: int) -> int:
for i, num in enumerate(nums):
print('i=', i, ', num=', num, ', nums=', nums)
if num == val:
nums.remove(val)
return len(nums) s = Solution()
s.removeElement([2, 0,1,2,2,3,0,4,2], 2)
# i= 0 , num= 2 , nums= [2, 0, 1, 2, 2, 3, 0, 4, 2]
# i= 1 , num= 1 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 2 , num= 2 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 3 , num= 3 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 4 , num= 0 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 5 , num= 4 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 6 , num= 2 , nums= [0, 1, 2, 3, 0, 4, 2]

解决方式:

① 使用尾递归方式

 class Solution:
def removeElement(self, nums, val: int) -> int:
for i, num in enumerate(nums[::-1]):
print('i=', i, ', num=', num, ', nums=', nums)
if num == val:
nums.remove(val)
return len(nums) s = Solution()
s.removeElement([2, 0,1,2,2,3,0,4,2], 2)
# i= 0 , num= 2 , nums= [2, 0, 1, 2, 2, 3, 0, 4, 2]
# i= 1 , num= 4 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 2 , num= 0 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 3 , num= 3 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 4 , num= 2 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 5 , num= 2 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 6 , num= 1 , nums= [0, 1, 3, 0, 4, 2]
# i= 7 , num= 0 , nums= [0, 1, 3, 0, 4, 2]
# i= 8 , num= 2 , nums= [0, 1, 3, 0, 4, 2]

② 使用 while 循环的方式

 class Solution:
def removeElement(self, nums, val: int) -> int:
i = 0
while i < len(nums):
print('i=', i, ', num=', nums[i], ', nums=', nums)
if nums[i] == val:
nums.pop(i)
else:
i += 1
return len(nums) s = Solution()
s.removeElement([2, 0,1,2,2,3,0,4,2], 2)
# i= 0 , num= 2 , nums= [2, 0, 1, 2, 2, 3, 0, 4, 2]
# i= 0 , num= 0 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 1 , num= 1 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 2 , num= 2 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 2 , num= 2 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 2 , num= 3 , nums= [0, 1, 3, 0, 4, 2]
# i= 3 , num= 0 , nums= [0, 1, 3, 0, 4, 2]
# i= 4 , num= 4 , nums= [0, 1, 3, 0, 4, 2]
# i= 5 , num= 2 , nums= [0, 1, 3, 0, 4, 2]

③ 对整个序列使用切片来创建一个临时副本

 class Solution:
def removeElement(self, nums, val: int) -> int:
for i, num in enumerate(nums[:]):
print('i=', i, ', num=', num, ', nums=', nums)
if num == val:
nums.remove(val)
return len(nums) s = Solution()
s.removeElement([2, 0,1,2,2,3,0,4,2], 2)
# i= 0 , num= 2 , nums= [2, 0, 1, 2, 2, 3, 0, 4, 2]
# i= 1 , num= 0 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 2 , num= 1 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 3 , num= 2 , nums= [0, 1, 2, 2, 3, 0, 4, 2]
# i= 4 , num= 2 , nums= [0, 1, 2, 3, 0, 4, 2]
# i= 5 , num= 3 , nums= [0, 1, 3, 0, 4, 2]
# i= 6 , num= 0 , nums= [0, 1, 3, 0, 4, 2]
# i= 7 , num= 4 , nums= [0, 1, 3, 0, 4, 2]
# i= 8 , num= 2 , nums= [0, 1, 3, 0, 4, 2]

Python 循环列表删除元素的注意事项的更多相关文章

  1. Python循环列表删除元素问题

    有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...

  2. Python list列表修改元素

    Python 提供了两种修改列表(list)元素的方法,你可以每次修改单个元素,也可以每次修改一组元素(多个). 修改单个元素 修改单个元素非常简单,直接对元素赋值即可.请看下面的例子: nums = ...

  3. Python循环列表的方法

    python循环列表的几种方法: 第一,依次打印列表中的各项值. 1 #!usr/bin/env python3 2 #!-*- Coding:utf-8 -*- 3 4 ''' 5 多种循环列表的方 ...

  4. python中列表删除和多重循环退出

    在学习python的时候,会有一些梗非常不适应,在此列举列表删除和多重循环退出的例子: 列表删除里面的坑 比如我们有一个列表里面有很多相同的值,假如:nums=[1,6,6,3,6,2,10,2,10 ...

  5. Python遍历列表删除多个列表元素

    在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...

  6. python遍历列表删除多个元素的坑

    如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...

  7. Python遍历列表删除多个元素或者重复元素

    在遍历list的时候,删除符合条件的数据,结果不符合预期   num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if i ...

  8. python中列表中元素的增删改查

    增: append : 默认添加到列表的最后一个位置 insert : 可以通过下标添加到列表的任意位置 extend: a.extend[b] --将b列表的元素全加入到列表b中 删; remove ...

  9. javascript在数组的循环中删除元素

    在开发JavaScript应用的过程中,经常会遇到在循环中移除指定元素的需求. 按照常规的思路,就是对数组进行一个for循环,然后在循环里面进行if判断,在判断中删除掉指定元素即可. 但是实际情况往往 ...

随机推荐

  1. rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件

    1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...

  2. Selenium-Switch与SelectApi介绍

    Switch 我们在UI自动化测试时,总会出现新建一个tab页面,弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了.需要用到Se ...

  3. linux运维、架构之路-内网NTP时间服务器

    一.环境 [root@m01 tmp]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 tmp]# hostname -I ...

  4. OC + RAC (十) 常用宏

    . RAC(TARGET, [KEYPATH, [NIL_VALUE]]) :用于给某个对象的某个属性绑定. // 只要文本框文字改变,就会修改label的文字 RAC(self.labelView, ...

  5. python内建模块——collections模块

    在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和Ord ...

  6. ubuntu 18.04下Chromium设置为系统代理

    前言 在ubuntu 18.04下挂上ss后firefox能直接上google了但是chromium上不去 会出现下面两种情况 # This site can't be reached xxxxxx ...

  7. Hash树——数据结构

  8. Linux CentOS7 安装docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口 ...

  9. NSProxy实现AOP方便为ios应用实现异常处理策略

    前段时间关注过objc实现的AOP. 在GitHub找到了其中的两个库:AOP-in-Objective-C 和 AOP-for-Objective-C 第一个是基于NSProxy来实现的:第二个是基 ...

  10. P3956棋盘

    传送 这看起来有点像个搜索,那我们就用搜索试试. dfs?bfs? 其实都可以,但是窝只会dfs.. 既然这里要用dfs,那么就要把每次搜到(m,m)时,使用的金币数量进行比较,取最小值. 在搜索过程 ...