1.添加元素
在 Python 中,向 set
添加一个元素可以使用 add()
方法。如果添加的元素已经存在于 set
中,add()
不会重复添加(因为 set
具有自动去重的特性)。
- 方法 1:
add(element)
(添加单个元素)
my_set = {1, 2, 3}
my_set.add(4) # 添加元素 4
print(my_set) # 输出: {1, 2, 3, 4}
my_set.add(2) # 尝试添加已存在的元素 2
print(my_set) # 输出: {1, 2, 3, 4}(不会重复添加)
- 方法 2:
update(iterable)
(添加多个元素)如果要从 可迭代对象(如list
、tuple
、set
)中添加多个元素,可以使用update()
:
my_set = {1, 2, 3}
my_set.update(3, 4, 5) # 添加列表中的元素(自动去重)
print(my_set) # 输出: {1, 2, 3, 4, 5}
- 方法 3:
|=
运算符(合并集合)也可以用|=
运算符合并另一个set
或可迭代对象:
my_set = {1, 2, 3}
my_set |= {3, 4, 5} # 相当于 my_set.update({3, 4, 5})
print(my_set) # 输出: {1, 2, 3, 4, 5}
注意事项
-
set
只能存储 不可变对象(如int
、str
、tuple
),不能直接存储list
、dict
等可变对象。
-
- 如果尝试添加可变对象(如
1, 2
),会抛出TypeError
: python my_set.add(1, 2) 报错: TypeError: unhashable type: ‘list’ 如果需要存储可变对象,可以改用frozenset
或转换为tuple
。
- 如果尝试添加可变对象(如
2.删除元素
2.1删除一个元素
在 Python 中,可以使用 set
的 remove()
或 discard()
方法来删除一个元素。两者的区别在于:
remove(element)
:如果元素存在,则删除;如果元素不存在,会抛出KeyError
异常。discard(element)
:如果元素存在,则删除;如果元素不存在,不会报错(静默处理)。 示例代码
my_set = {1, 2, 3, 4, 5}
# 方法1: remove()
my_set.remove(3) # 删除元素 3
print(my_set) # 输出: {1, 2, 4, 5} 如果元素不存在,remove() 会报错
try:
my_set.remove(99) # KeyError: 99
except KeyError as e:
print(f"Error: {e}")
# 方法2: discard()
my_set.discard(2) # 删除元素 2
print(my_set) # 输出: {1, 4, 5}
my_set.discard(99) # 元素不存在,但不会报错
print(my_set) # 输出: {1, 4, 5}
pop()
随机删除一个元素并返回它:
popped_element = my_set.pop() # 随机删除并返回一个元素
print(f"Popped: {popped_element}, Remaining: {my_set}")
总结
- 确定元素存在 → 用
remove()
。 - 不确定元素是否存在 → 用
discard()
。 - 需要随机删除 → 用
pop()
。
2.2 删除一组元素
要从 set
中快速删除 list
中的所有元素,可以使用 set
的 difference_update()
方法,或者直接用 -=
运算符。这两种方法都会直接修改原 set
,删除所有在 list
中存在的元素。
- 方法 1:
difference_update()
my_set = {1, 2, 3, 4, 5}
to_remove =[2, 3, 6] # 6 不在 set 中,会被忽略
my_set.difference_update(to_remove) # 直接修改原 set
print(my_set) # 输出: {1, 4, 5}
- 方法 2:
-=
运算符(推荐)
my_set = {1, 2, 3, 4, 5}
to_remove = [2, 3, 6]
my_set -= set(to_remove) # 相当于 my_set = my_set - set(to_remove)
print(my_set) # 输出: {1, 4, 5}