Python 循环列表删除元素的注意事项
错误示范:
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 循环列表删除元素的注意事项的更多相关文章
- Python循环列表删除元素问题
有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...
- Python list列表修改元素
Python 提供了两种修改列表(list)元素的方法,你可以每次修改单个元素,也可以每次修改一组元素(多个). 修改单个元素 修改单个元素非常简单,直接对元素赋值即可.请看下面的例子: nums = ...
- Python循环列表的方法
python循环列表的几种方法: 第一,依次打印列表中的各项值. 1 #!usr/bin/env python3 2 #!-*- Coding:utf-8 -*- 3 4 ''' 5 多种循环列表的方 ...
- python中列表删除和多重循环退出
在学习python的时候,会有一些梗非常不适应,在此列举列表删除和多重循环退出的例子: 列表删除里面的坑 比如我们有一个列表里面有很多相同的值,假如:nums=[1,6,6,3,6,2,10,2,10 ...
- Python遍历列表删除多个列表元素
在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...
- python遍历列表删除多个元素的坑
如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...
- Python遍历列表删除多个元素或者重复元素
在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if i ...
- python中列表中元素的增删改查
增: append : 默认添加到列表的最后一个位置 insert : 可以通过下标添加到列表的任意位置 extend: a.extend[b] --将b列表的元素全加入到列表b中 删; remove ...
- javascript在数组的循环中删除元素
在开发JavaScript应用的过程中,经常会遇到在循环中移除指定元素的需求. 按照常规的思路,就是对数组进行一个for循环,然后在循环里面进行if判断,在判断中删除掉指定元素即可. 但是实际情况往往 ...
随机推荐
- springboot2.0整合redis的发布和订阅
1.Maven引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- 前端面试题:CSS实现水平垂直居中
这是一个挺常见的前端面试题,但是没有做过总结.有的时候可能会使用完了,很长一段时间不去使用,会慢慢忘记.所以,温故而知新,还是很有必要的. 一.绝对定位元素的居中实现 这一种工作中用的应该是最多的,兼 ...
- 为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法
网上提供了很多办法,都未解决. 解决过程一波三折,依次用了下列方法: 1.解决办法 点击“开始”-“控制面板”-“管理工具”-“组件服务”-“计算机”-“我的电脑”-“DCOM”选项, 选择其下的“I ...
- win7系统下安装Splash。
参考地址:https://www.jianshu.com/p/4052926bc12c 期间遇到的问题: 关于virtualbox的问题: 启动虚拟机失败 http://www.cnblogs.com ...
- 去掉注释index.html
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- pandas 之dataFrame 数据显示不完全的解决方案
对于这种省略部分,可以使用set_option进行设置,就可以看到了. # 显示所有行(参数设置为None代表显示所有行,也可以自行设置数字) pd.set_option('display.max_c ...
- oracle 数据迁移之数据泵的基本使用
oracle相同数据库下跨schema的表迁移—expdp/impdp 需求:将GUIDO用户下的表迁移到SCOTT用户下 select * from dba_role_privs where GRA ...
- 百度地图api设置点的自定义图标不显示
百度地图api设置点的设置代码为: var myIcon = new BMap.Icon(): 所以首先要找到这行代码,并在括号中加上图片信息: var myIcon = new BMap.Icon( ...
- KEIL建立新唐MCU的工程时,移植官网程序报错变量未定义问题解决方法
最近在使用新唐的MCU,新唐的MCU使用还算方便,你安装好KEIL之后再安装 Nu-Link_Keil_Driver_V3.00.6909 驱动即可建立新唐的MCU工程,注意的是因为新唐MCU是C51 ...
- datastudio 里关于with as 的用法。
datastudio 里sql 语句的写法,加入with as 语法. 这样方便查询,易于维护.以后都这样写. 优点: 1 易于维护,可以复用代码块 2 优化书写逻辑,方便查阅理解. 3 性能方面优 ...