要从 Python 中的 list (array) 类型的列表中删除一个元素,可以使用列表方法 clear()、pop() 和 remove() 。你也可以通过使用 index 或 slice 来指定列表的位置和范围,然后使用 del 语句删除它。
这里提供了以下信息。
- 删除所有元素:
clear()
- 在指定的位置删除一个元素并获得其值。:
pop()
- 搜索具有指定值的元素并删除第一个元素。:
remove()
- 通过指定索引片中的位置和范围进行删除:
del
- 批量删除符合标准的多个元素。:列表中包含的指示
注意,列表可以存储不同类型的数据,与数组有严格的区别。当你想为需要内存大小或内存地址的进程处理数组时,或为大规模数据的数值计算时,请使用array(标准库)或NumPy。
删除所有元素: clear()
在列表方法clear()中,所有的元素都被移除,结果是一个空列表。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l.clear()
print(l)
# []
在指定的位置删除一个元素并获得其值。: pop()
列表的pop()方法可以用来删除指定位置的一个元素,并获得该元素的值。
第一个(初始)数字是0。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l.pop(0))
# 0
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l.pop(3))
# 4
print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]
也可以用一个负值来指定从结束(最后)开始的位置。末尾(最后)是-1。
print(l.pop(-2))
# 8
print(l)
# [1, 2, 3, 5, 6, 7, 9]
如果省略了参数,也没有指定位置,那么最后(最后)的元素将被删除。
print(l.pop())
# 9
print(l)
# [1, 2, 3, 5, 6, 7]
指定一个不存在的位置将导致一个错误。
# print(l.pop(100))
# IndexError: pop index out of range
请注意,pop(0),即移除第一个元素,需要以下成本,不是一个有效的操作。关于列表上各种操作的计算复杂度,请参见官方维基上的以下页面。O(n)
O(1)
标准库集合模块中提供了deque类型,作为一种以这种代价将元素删除到顶部的类型。例如,如果你想把数据当作一个队列(FIFO),使用deque会更有效率。
搜索具有指定值的元素并删除第一个元素。: remove()
列表方法remove()可以用来搜索与指定值相同的元素,并删除第一个元素。
l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']
如果列表中包含多个与指定值相匹配的元素,只有第一个元素会被删除。
l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']
如果指定了一个不存在的值,就会发生错误。
# l.remove('xxx')
# ValueError: list.remove(x): x not in list
通过指定索引片中的位置和范围进行删除: del
你也可以使用del语句从列表中删除元素。
通过索引指定要删除的元素。第一个(初始)索引是0,最后一个(最终)索引是-1。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]
del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]
如果你用切片指定一个范围,你可以一次删除多个元素。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]
l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]
l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]
l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]
也可以指定整个范围并删除所有元素。
l = list(range(10))
del l[:]
print(l)
# []
[start:stop:step]
如果你以这种方式指定切片中的范围,并指定增量步骤,你可以一次删除多个跳转元素。
l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]
l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]
关于切片的更多信息,请参见以下文章。
批量删除符合标准的多个元素。: 列表中包含的指示
删除满足条件的元素的过程等同于留下(提取)不满足条件的元素的过程。列表理解符号被用于这种处理。
- 相关文章。使用Python的列表理解符号
一个去除奇数或偶数元素(=留下偶数或奇数元素)的例子显示如下。%
这就是余数运算符。i % 2
这就是i的余数除以2。
在列表理解的符号中,一个新的列表被创建。与到目前为止介绍的列表类型方法不同,原始列表保持不变。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]
print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
其他例子。根据条件表达式的不同,可以进行各种处理。
l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']
print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']
如果你想删除重复的元素,请使用set集合类型。
print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']