remove()按值删首个匹配项,值不存在报ValueError;pop()按索引删并返回元素,越界报IndexError;del是语句,可删索引、切片或变量;clear()安全清空列表内容。

用 remove() 删值,但删不到会报错
remove() 是按值删除第一个匹配项,不是按位置。它不返回被删的元素,只修改原列表;如果值不存在,直接抛 ValueError: list.remove(x): x not in list。
常见错误:循环中用 remove() 删多个相同值,结果漏删——因为删完一个,后续元素前移,下标跳过了。
- 适用场景:确定值存在,且只要删掉第一个出现位置
- 别在
for x in lst:里调lst.remove(x),会出错或漏删 - 想删所有匹配项,改用列表推导:
lst = [x for x in lst if x != target]
pop() 按索引删,还能拿到被删的值
pop() 默认删末尾(pop(-1)),也可以指定索引,返回被删元素。索引越界会报 IndexError,这点和 remove() 的报错类型不同。
注意:空列表调 pop() 必然报错,不像 clear() 那样安全。
立即学习“Python免费学习笔记(深入)”;
- 常用在“取栈顶”“队列弹出”这类需要消费元素的场景
- 删倒数第二个?用
lst.pop(-2),别写成lst.pop(len(lst)-2),后者在空列表时更易崩 - 不关心返回值时,
pop()和del lst[-1]效果一样,但前者略慢一点(有返回值开销)
del 是语句,能删单个、切片、甚至整个变量
del 不是函数,不能加括号,也不返回任何东西。它可以删指定索引、切片、或整个变量名(解除引用)。
容易踩的坑:误写成 del(lst[0]) —— 圆括号会让 Python 当成函数调用,报 TypeError: 'NoneType' object is not callable。
- 删第3个:
del lst[2](不是del(lst[2])) - 删前两个:
del lst[0:2],等价于lst[:2] = [] - 清空并释放引用:
del lst,之后再访问lst就是NameError
clear() 最安全,但只清内容不删变量
clear() 是 Python 3.3+ 加入的方法,作用就是清空列表内容,不影响变量本身,也不会触发任何异常。
对比 lst = []:后者是新建空列表并绑定到名字,原列表对象若还有其他引用,不会被清;clear() 是就地清空,所有引用都看到空列表。
- 多处引用同一列表时,必须用
clear()才能真正同步清空 - 想重用列表对象避免反复分配内存(比如在循环里反复填充),优先选
clear() - Python 3.2 及更早版本没有
clear(),得用del lst[:]或lst[:] = []
最常被忽略的是引用语义:用 = [] 看似清空,其实可能留着旧数据在别的变量里;而 remove() 和 pop() 的异常类型、触发条件也各不相同,不看报错信息容易卡住。


















