百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

列表删除元素方法知多少?Python列表删除黑科技的终极PK

liuian 2025-03-13 17:21 32 浏览

许多Python新手在数据清洗时,仍在使用笨拙的for循环删除列表元素。殊不知这会导致O(n^2)时间复杂度,当处理百万级数据时,耗时将暴增600%。今天我们来看下列表删除元素的四大天王,看看谁更厉害!

一、remove单杀无敌

首先,我们来看remove()方法,上代码:

animals = ["", "", "", ""]
animals.remove("")
print(animals)

运行结果:

['', '', '']

代码解读:remove()根据值删除元素,但只会删除第一个匹配项。当处理重复数据时,容易造成"漏删"现象,这是列表操作中最常见的隐藏bug。

二、 毁灭者del的AOE

matrix = [[1,2], [3,4], [5,6]]
del matrix[1:3]  # 删除索引1到2(不含3)
print(matrix)  # [[1, 2]]
del matrix
print(matrix)  # NameError: name 'matrix' is not defined

运行结果:

[[1, 2]]
NameError: name 'matrix' is not defined

开发技巧:del支持切片删除和多维数据结构操作,也支持直接删除整个列表变量。可删除后这个变量就被毁灭了,存储的数据也就没了,所以使用del删除操作请务必谨慎!

三、背刺之王pop()的意外惊喜

stack = ["", "", ""]
last_item = stack.pop()
print(f"取出 {last_item},剩余 {stack}")

cache = ["A", "B", "C", "D"]
cache.pop(0)
print(cache)

运行结果:

取出 ,剩余 ['', '']
['B', 'C', 'D']

从代码中我们看出,当无参数的时候,pop()的默认用法是将列表的最后一个元素踢出列表并返回,所以我们可以通过pop()的返回值获取列表的最后一个元素。而给pop()设置一个索引值的时候,我们也可以获取对应索引的值。pop()的返回值特性,使其天然适合实现栈(先进后出)、队列(先进先出)等数据结构,这是其他删除方法做不到的。

四、杀手之王clear()的终极清场

chat_history = ["你好", "吃了吗", "在干嘛"]
chat_history.clear()
print(chat_history)

运行结果:

[]

clear()的用法是直接删除列表中的所有元素。

clear()与del()的区别:这两者都可以删除列表中的所有元素,他们之间有什么区别呢?

temp = [1,2,3];
del temp  # 完全销毁
print(temp)
temp2 = [4,5,6]
temp2.clear()  # 清空但保留壳
print(temp2)  # []

运行结果:

NameError: name 'matrix' is not defined
[]

从运行结果我们可以知道,del()删除的时候是将变量列表都删除了,所以会提示变量'matrix'没有被定义。而clear()则只会删除列表中的元素,存储元素的这个变量外壳还被保留了下来。

易错点警报

  1. 循环删除黑洞:在遍历列表时删除元素会导致索引错乱(这个错误在Python新手期很常见),请看示例代码:
# 删除列表中的偶数
numbers = [1, 2, 4, 6, 7, 8]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)
print(numbers) 

运行结果:

[1, 4, 7]

运行结果中遗留了偶数4,为什么会出现这种情况呢?下面我们来分析一下代码运行的过程:初始列表索引:[0:1, 1:2, 2:4, 3:6, 4:7, 5:8],当删除索引1的元素2后,列表变为 [1,4,6,7,8],循环继续处理下一个索引2(原列表的索引3),此时元素是6(正确应处理新列表的索引1元素4),结果导致元素4被跳过未被删除。

我们可以用以下三种方案来解决这个问题:

#  方法1:创建新列表
numbers = [1, 2, 4, 6, 7, 8]
numbers = [num for num in numbers if num % 2 != 0]

#  方法2:倒序遍历(避免索引前移)
for num in reversed(numbers):
    if num % 2 == 0:
        numbers.remove(num)

#  方法3:遍历副本
for num in numbers.copy():
    if num % 2 == 0:
        numbers.remove(num)

运行结果:

[1, 7]

这三种方案都可以完整的删除列表中的偶数,不引起索引的混乱。

  1. pop()的致命空弹:空列表使用pop会引发IndexError
empty = []
empty.pop()

运行结果:

IndexError: pop from empty list

错误提示:索引错误,对空列表进行pop操作。这个错误提示很直白的告诉我们,不可以对空列表进行pop操作


练习

基础题:删除列表["","","",""]中所有的瓜类水果(以""结尾)

进阶题:实现函数批量删除列表中的素数(要求时间复杂度O(n))

彩蛋题:当执行 [1,2,3].remove(4) 时会发生什么?如何优雅处理?


上期文章练习参考答案

基础题答案

lst = []
for c in "hello":
    lst.append(c)

进阶题答案

class RingBuffer:
    def __init__(self):
        self.buffer = []

    def add(self, item):
        if len(self.buffer) >= 5:
            self.buffer.pop(0)
        self.buffer.append(item)

彩蛋题答案

def reverse_list(lst):
    res = []
    for x in lst:
        res.insert(0, x)
    return res

相关推荐

dell电脑蓝屏开不了机怎么办

电脑蓝屏的解决方法,先软件后硬件,一般软件问题比较多一点。1、最后一次正确的配置:在开机启动未进入到操作系统之前我们不停按下F8键,选择“最后一次正确的配置”然后回车即可。2、安全模式:如果“最后一次...

如何单独改c盘为mbr模式(如何c盘改为mbr分区 免格式化)

   硬盘分为两种格式的分区,一种是GPT,一种是MBR,一般win7或者以下系统是安装在MBR分区中,而win8和win10一般是安装在gpt分区中的,这两个分区格...

win7activation解压密码(windows7解压文件去哪里了)

若使用的是vivo手机,忘记vivo账号密码、锁屏密码,可携带手机、身份证、有效的购机凭证前往服务中心处理,进入浏览器搜索vivo官网--服务--服务中心--查看全部--选择省市查询当地的服务中心地址...

移动固态硬盘排行榜(移动固态硬盘排行榜前十名)

西部数据。西部数据MyPassport随行SSD版。西数最主打的移动固态硬盘,如果在大促期间可以在900元以下的价格买到,搭载了NVMe技术,最大读速1050M/S,这是主流大厂速度在1050M/S...

u盘怎样安装系统(u盘怎样安装系统驱动)
  • u盘怎样安装系统(u盘怎样安装系统驱动)
  • u盘怎样安装系统(u盘怎样安装系统驱动)
  • u盘怎样安装系统(u盘怎样安装系统驱动)
  • u盘怎样安装系统(u盘怎样安装系统驱动)
windows资源管理器怎么关闭(windows资源管理器关闭后电脑黑屏)

1、鼠标放在桌面,右击选中启动任务管理器。2、进入任务管理器之后,点击上方的进程,然后找explorer。3、鼠标右击explorer,选中结束进程。4、接着弹出弹框,确认结束进程,这样Windows...

win10正版系统官网原版纯净版gho

下载Ghost版本的Win10的iso文件然后把这个iso文件解压出来然后使用搜索的方式搜索出.GHO文件就是你需要的win10.gho安装,这是系统的ghost文件,你可以选择制作pe系统u盘...

修改qq密码的注意事项(修改qq密码要怎么样)
  • 修改qq密码的注意事项(修改qq密码要怎么样)
  • 修改qq密码的注意事项(修改qq密码要怎么样)
  • 修改qq密码的注意事项(修改qq密码要怎么样)
  • 修改qq密码的注意事项(修改qq密码要怎么样)
戴尔官方网站查询真伪(戴尔官方正品查询)

找到笔记本背面或底部的服务标签或快速服务代码(也可以跳过这步)。打开dell支持网页http://www.dell.com/support/home/cn/zh/cnbsd1?c=cn&l=z...

手机无法连接无线网络(手机怎么连无线网络wifi)

导致无线网络连接受限的原因主要是由于DNS设置不当、热点本身无法正常访问网络以及防火墙阻止访问网络所造成的。首先需要关闭防护类软件,从而允许无线网络访问外网。在电脑右下角右键点击无线网图标,在弹出菜单...

如何格式化(如何格式化C盘)

win10电脑格式化操作步骤如下:首先按下键盘的【win】键,然后选择【设置】。然后在设置界面选择【更新和恢复】。接着在弹出的窗口左侧点击【恢复】,然后在右侧的重置此电脑下点击【开始】。再进入重置界面...

w10专业版激活方法(widows10专业版怎么激活)

1、首先,我们先查看一下windows10专业版激活状态:点击桌面左下角的“Windows”按钮,从打开的扩展面板中依次点击“设置”-“更新和安全”,并切换到“激活”选项卡,在此就可以查看到当前系统的...

win11默认安装路径怎么修改(windows10默认安装路径更改)

方法如下:1、首先打开左下角开始菜单。2、接着打开其中的“设置”。3、然后进入“存储”选项。4、随后展开高级存储设置,打开“保存新内容的地方”。5、在其中修改新内容的保存路径。6、修改好之后...

鸿蒙系统电脑版下载(电脑鸿蒙系统电脑版)
  • 鸿蒙系统电脑版下载(电脑鸿蒙系统电脑版)
  • 鸿蒙系统电脑版下载(电脑鸿蒙系统电脑版)
  • 鸿蒙系统电脑版下载(电脑鸿蒙系统电脑版)
  • 鸿蒙系统电脑版下载(电脑鸿蒙系统电脑版)
百度云盘怎么用
百度云盘怎么用

用户可通过关注功能获得好友分享动态,实现文件共享;通过云相册可以便利地存储、浏览、分享、管理自己的照片,用照片记录和分享生活中的美好。百度网盘能实现图片智能分类、自动去重等功能,还能以图搜图,在海量图片中精准定位目标;百度网盘手机APP能提...

2026-01-13 19:05 liuian