返回

Python 列表删除元素

在python中删除列表中元素是比较常见的操作,删除的方法也比较多,这里列一下最常见的做法

pop方法

pop()方法用于删除指定位置的元素,默认删除最后一个元素,返回值为该元素。如果索引超出范围,引发IndexError异常

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
l = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']

# 删除索引为1的元素
remove_element = l.pop(1)
print(remove_element)   # lisi
print(l)  # ['zhangsan', 'wangwu', 'zhaoliu']

# 删除最后一个元素
remove_element = l.pop()
print(remove_element)   # zhaoliu
print(l)  # ['zhangsan', 'wangwu']

# 删除超过索引的元素
remove_element = l.pop(10) # IndexError: pop index out of range

注意:

  • 需要知道要删除元素的指定索引位置。
  • 索引超出范围,会抛出异常

使用场景

适用于需要删除特定位置元素的场景,尤其是删除最后一个元素时。

remove方法

remove()方法用于删除匹配到的第一个元素,无返回值。如果要删除的元素不存在,引发ValueError异常

1
2
3
4
5
6
7
8
l = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'lisi']

# 删除lisi
l.remove('lisi')
print(l)  # ['zhangsan', 'wangwu', 'zhaoliu', 'lisi']

# 删除不存在的元素
l.remove('xxx')  # ValueError: list.remove(x): x not in list

注意:

  • remove只会删除第一个匹配到的元素,如果有多个相同的元素要删除,那么remove就不太适用
  • 删除不存在的元素,会抛出异常

使用场景

适用于删除已知值的元素,且列表中该值不重复或只需删除第一个匹配项的场景。

del语句

delpop()方法类似,都是用于删除指定索引位置的元素,但是del更灵活一些,可以删除指定位置的切片,索引超出范围,会引发IndexError异常

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
l = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'lisi']

# 删除索引为1的元素
del l[1]
print(l)  # ['zhangsan', 'wangwu', 'zhaoliu', 'lisi']

# 删除索引0-2的切片
del l[0:2]
print(l)  # ['zhaoliu', 'lisi']

# 删除不存在的索引
del l[100]
print(l)  # IndexError: list assignment index out of range

注意:

  • 要知道要删除元素的指定索引位置
  • 索引超出范围,会抛出异常

使用场景

适用于删除特定位置或范围内的元素。

列表推导式

可以创建一个新列表,用于删除想删除的元素,比较灵活

1
2
3
4
5
l = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'lisi']

# 删除lisi
new_l = [element for element in l if element != 'lisi']
print(new_l)  # ['zhangsan', 'wangwu', 'zhaoliu']

注意:

  • 这种方式不能原地删除,需要创建新列表,开辟新的内存空间
  • 列表非常大的情况,效率比较低,内存占用比较大

使用场景

适用于需要删除多个相同元素或复杂条件删除的场景。

filter函数

filter函数和列表推导式方式很像,但是filter函数是一个迭代器,内存效率高,处理大数据集时更高效

1
2
3
4
5
l = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'lisi']

# 删除lisi
new_l = list(filter(lambda x: x != 'lisi', l))
print(new_l)  # ['zhangsan', 'wangwu', 'zhaoliu']

注意:

  • 这种方式不能原地删除,需要创建新列表,开辟新的内存空间

使用场景

适用于需要删除多个相同元素或复杂条件删除的场景,尤其是处理大数据集时。

总结

方法使用场景优点缺点
pop删除特定位置元素,尤其是最后一个元素操作简单,返回被删除的元素需要知道索引,索引超出范围会抛出异常
remove删除已知值的元素不需要知道索引只能删除第一个匹配项,删除不存在的元素会抛出异常
del删除特定位置或范围内的元素可以删除切片,灵活性高需要知道索引,索引超出范围会抛出异常
列表推导式删除多个相同元素或复杂条件删除灵活性高需要创建新列表,内存占用较大,处理大数据集时效率较低
filter删除多个相同元素或复杂条件删除,处理大数据集内存效率高,适合处理大数据集需要创建新列表,不能原地删除
发表了9篇文章 · 总计5.02k字
已运行