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判断,在判断中删除掉指定元素即可. 但是实际情况往往 ...
随机推荐
- 1N4148
摘自http://baike.baidu.com/link?url=0iTO7zZvHpCeJiZurTPpjDT95YdJu7cKdTeCWfol36b4JG5ii15leQ7K4wJWAZIBNb ...
- Centos7硬盘空间扩容(vmware虚拟机)
1. 查看系统挂载点 df -h 2. 系统关机 init 0 硬盘1空间修改为100G,保存并启动 3.查看磁盘 fdisk -l /dev/sda空间加上去了 3. 硬盘分区 fdisk /dev ...
- 【ElicitSearch】启动流程
一.集群启动流程 1.选举主节点 许多节点启动,集群干的第一件事儿就是选主,之后的的流程由主节点触发. 先确定唯一的.大家公认的主节点:再想办法把最新的及其原数据复制到选举的主节点上. 选主是对Bul ...
- UI定位元素大全(跟App定位元素差不多哦)
selenium+python自动化之元素定位 作者:一飞冲天 同样的道理,把一个页面上的元素当成是一个对象(你的女神),我们就可以通过她的属性值来找到她,比如她性别女爱好爬山---------你就可 ...
- Python 爬虫实战(1):分析豆瓣中最新电影的影评
目标总览 主要做了三件事: 抓取网页数据 清理数据 用词云进行展示 使用的python版本是3.6 一.抓取网页数据 第一步要对网页进行访问,python中使用的是urllib库.代码如下: from ...
- 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(主席树+二分)
题意:n个竹子,有高度,q次询问,询问之间是独立的,每次查询输入l,r,x,y代表砍区间[l,r]]内的竹子砍y次,最后一次要砍成0,每次砍掉的总长度相同,问第x次砍的高度是多少. 既然每次要求砍掉的 ...
- php函数名后冒号+数据类型(返回值类型限制/php新特性)
在PHP7,一个新的功能,返回类型声明已被引入.返回类型声明指定的一个函数返回值的类型. int float bool string interfaces array callable 对象实例 如下 ...
- php.ini 配置项详解
本文主要对php.ini文件进行详细的解释 engine = On ——> 在apache下启用php语言引擎 short_open_tag = Off ——> 是否开启段标签 若php ...
- C#-概念-接口:接口
ylbtech-C#-概念-接口:接口 接口(硬件类接口)是指同一计算机不同功能层之间的通信规则称为接口. 接口(软件类接口)是指对协定进行定义的引用类型.其他类型实现接口,以保证它们支持某些操作.接 ...
- 凉经-乐糖游戏-PHP开发实习生
收到面试通知当天因为学校出事要求我明天必须回去,所以就买当晚的火车票,然后跟公司说学校有事明天没法去面试了,公司人事比较好给我安排到当天下午面试.公司规模不是很大,但位置好下了地铁到,可能因为招的是实 ...