在python编程中,list是灵活且常用的序列类型,实际开发中经常需要对list进行元素删除或者整个列表删除的操作,不同的操作需求对应不同的实现方式,下面就来详细介绍具体的操作方法。

按值删除list元素:remove方法
如果知道要删除的元素的具体值,不知道它的索引位置,可以使用remove方法,该方法会删除list中第一个匹配到的指定值。
使用示例:
# 定义测试list my_list = [1, 2, 3, 2, 4] # 删除第一个值为2的元素 my_list.remove(2) print(my_list) # 输出结果:[1, 3, 2, 4]
注意事项:
- 如果要删除的值不在list中,会抛出
ValueError异常,使用前可以先判断值是否存在 - 如果list中有多个相同的目标值,只会删除第一个出现的,不会全部删除
按索引删除list元素:pop方法
pop方法可以删除指定索引位置的元素,并且会返回被删除的元素,如果不传入索引参数,默认删除最后一个元素。
使用示例:
my_list = [1, 2, 3, 4, 5] # 删除索引为1的元素,也就是值2 deleted_item = my_list.pop(1) print(deleted_item) # 输出结果:2 print(my_list) # 输出结果:[1, 3, 4, 5] # 不传参数,删除最后一个元素 last_item = my_list.pop() print(last_item) # 输出结果:5 print(my_list) # 输出结果:[1, 3, 4]
注意事项:如果传入的索引超出list的范围,会抛出IndexError异常。
通用删除方式:del语句
del是python的关键字,可以用来删除list中指定索引的元素,也可以删除整个list,还可以删除list的切片片段。
不同场景的使用示例:
my_list = [1, 2, 3, 4, 5, 6] # 删除索引为2的元素,即值3 del my_list[2] print(my_list) # 输出结果:[1, 2, 4, 5, 6] # 删除索引1到3的元素(左闭右开,删除索引1、2的元素) del my_list[1:3] print(my_list) # 输出结果:[1, 5, 6] # 删除整个list del my_list # 此时再访问my_list会抛出NameError异常,因为变量已经被删除
清空list所有元素:clear方法
如果需要保留list对象,只是清空里面的所有元素,可以使用clear方法,该方法会清空list的所有内容,让list变成空列表。
my_list = [1, 2, 3, 4] my_list.clear() print(my_list) # 输出结果:[]
不同删除方法的适用场景对比
为了更清晰区分几种方法的适用场景,整理如下对比表格:
| 方法/语句 | 适用场景 | 是否返回值 | 注意事项 |
|---|---|---|---|
| remove | 已知元素值,删除第一个匹配项 | 否 | 值不存在会抛异常 |
| pop | 按索引删除,需要获取被删除元素 | 是 | 索引越界会抛异常 |
| del | 按索引/切片删除,或删除整个列表 | 否 | 删除整个列表后变量会消失 |
| clear | 清空列表所有元素,保留列表对象 | 否 | 列表会变成空列表 |
删除list元素的常见误区
很多开发者在循环遍历list的时候直接删除元素,会导致遍历结果不符合预期,比如下面这个错误示例:
my_list = [1, 2, 3, 4, 5]
# 错误示例:遍历过程中删除元素
for item in my_list:
if item % 2 == 0:
my_list.remove(item)
print(my_list) # 输出结果:[1, 3, 5]?实际输出是[1, 3, 5]吗?不,实际输出是[1, 3, 5]?不对,实际运行会发现结果不符合预期,因为删除元素后list长度变化,遍历的索引会错位
正确的做法是在遍历的时候遍历list的副本,或者倒序遍历:
my_list = [1, 2, 3, 4, 5]
# 方法1:遍历副本
for item in my_list.copy():
if item % 2 == 0:
my_list.remove(item)
print(my_list) # 输出结果:[1, 3, 5]
# 方法2:倒序遍历
my_list = [1, 2, 3, 4, 5]
for i in range(len(my_list)-1, -1, -1):
if my_list[i] % 2 == 0:
del my_list[i]
print(my_list) # 输出结果:[1, 3, 5]