[python] set

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)(添加多个元素)如果要从 可迭代对象(如 listtupleset)中添加多个元素,可以使用 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} 

注意事项

    1. set 只能存储 不可变对象(如 intstrtuple),不能直接存储 listdict 等可变对象。
    1. 如果尝试添加可变对象(如 1, 2),会抛出 TypeError: python my_set.add(1, 2) 报错: TypeError: unhashable type: ‘list’ 如果需要存储可变对象,可以改用 frozenset 或转换为 tuple

2.删除元素

2.1删除一个元素

在 Python 中,可以使用 setremove()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 中的所有元素,可以使用 setdifference_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} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值