HOWTO · Python
在 Python 中从集合中删除元素
在 Python 中从集合中删除元素有多种方法。remove() 和 discard() 函数删除单个元素,pop() 删除任意一个元素,而 - 运算符、difference() 和 difference_update() 则一次删除多个元素。
本页内容
本教程将讨论在 Python 中从集合中删除元素的不同方法。删除单个元素可以使用 remove()、discard() 或 pop();一次删除多个元素可以使用 - 运算符、difference() 或 difference_update()。
使用 remove() 函数删除单个元素
set.remove() 函数从集合中删除指定的元素。它以要删除的元素作为参数。如果元素存在,就会被删除;如果元素不存在,remove() 会引发 KeyError。请看下面的代码示例。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(5)
print(set1)
输出:
{0, 1, 2, 3, 4, 6, 7, 8, 9}
在上面的代码中,我们用 remove(5) 从 set1 中删除了元素 5。下面这个示例展示了指定值不在集合中的情形。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(51)
print(set1)
输出:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyError: 51
我们尝试从 set1 中删除值 51。由于 set1 中不存在值 51,remove() 函数会引发 KeyError。
使用 discard() 函数删除单个元素
discard() 函数与 remove() 非常相似:如果值存在,它就从集合中删除指定的元素。唯一的区别是,如果值不在集合中,discard() 不会引发 KeyError——它只是让集合保持不变。下面的代码片段展示了如何用 discard() 从集合中删除单个元素。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(5)
print(set1)
输出:
{0, 1, 2, 3, 4, 6, 7, 8, 9}
我们用 discard() 函数从 set1 中删除了值 5。如上所述,如果传入的值不在 set1 中,代码仍会成功执行且不会引发任何异常,如下面的示例所示。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(51)
print(set1)
输出:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
我们尝试用 discard() 函数从 set1 中删除 51。由于指定值在 set1 中不存在,没有元素被删除,也没有错误发生;set1 原样输出。
使用 pop() 函数删除任意元素
pop() 函数从集合中删除并返回一个任意元素。当你不关心删除哪个元素时使用它,例如逐个处理元素直到集合为空时。
set1 = {1, 2, 3, 4, 5}
removed = set1.pop()
print(removed)
print(set1)
输出:
1
{2, 3, 4, 5}
pop() 返回了 1 并将其从 set1 中删除。返回哪个元素是任意的——语言并不保证是特定的某一个——因此绝不能依赖 pop() 删除某个特定的值。与 remove() 一样,如果集合为空,pop() 也会引发 KeyError。
使用 - 运算符删除多个元素
- 运算符在 Python 中执行集合差集运算。它从左侧集合中删除右侧集合的所有元素,并以新集合的形式返回结果。右侧集合中不在左侧集合里的元素会被直接忽略,这种方法不会引发任何异常。下面的代码片段展示了如何用 - 运算符删除多个元素。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)
输出:
{1, 3, 5, 7, 9}
我们用 - 运算符从 set1 中删除了 set2 的所有元素,并把结果集合赋回给 set1。下面的代码示例展示了两个集合没有共同元素的情形。
set1 = {1, 3, 5, 7, 9}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)
输出:
{1, 3, 5, 7, 9}
由于右侧集合的元素没有一个在左侧集合中,代码成功执行,- 运算符原样返回左侧集合。
使用 difference() 函数删除多个元素
set.difference() 函数以方法的形式执行与 - 运算符相同的集合差集运算。它以需要删除其元素的集合作为输入参数,从调用集合中删除其所有元素,并以新集合的形式返回结果。请看下面的代码片段。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1.difference(set2)
print(set1)
输出:
{1, 3, 5, 7, 9}
我们用 difference() 函数从 set1 中删除了 set2 的所有元素,并把结果存入 set1。当输入集合的值不在调用集合中时,difference() 的情形与 - 运算符相同:什么都不删除,也不引发错误。
使用 difference_update() 函数原地删除多个元素
前两种方法都会返回一个新集合,因此结果必须存放在某处。difference_update() 函数则不同:它原地更新调用集合,直接从中删除参数集合的所有元素。
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1.difference_update(set2)
print(set1)
输出:
{1, 3, 5, 7, 9}
我们用 difference_update() 函数从 set1 中删除了 set2 的所有元素,set1 本身现在就保存着结果集合——与前两种方法不同,不需要为了存放结果而再创建一个新集合。difference_update() 函数等价于 Python 中的 -= 运算符。
结论
删除单个元素时,元素必须存在就用 remove()——缺失的元素会引发 KeyError,能让错误尽早暴露;元素可能不存在就用 discard()。任意元素都可以时用 pop()。一次删除多个元素时,用 - 运算符或 difference() 得到新集合,或用 difference_update()(等价于 -=)原地更新集合。