Python学习记录7——集合set()的使用指南

引言

在Python中,集合(set)是一种无序、可变且元素唯一的数据容器,常用于去重操作和数学集合运算。本文记录集合的所有方法,通过代码示例帮助自己,也帮助读者查询学习这一重要数据结构。

一、集合特性

Python中集合有以下特性:

  • 元素唯一性:集合中的所有元素只能出现一次,如果重复添加,集合会自动过滤重复项;
  • 无序存储:不支持通过索引的方式访问;
  • 可变对象:支持对集合内的元素进行增删操作;
  • 哈希元素:只能包含不可变类型数据(如int,float等数字类型、字符串类型、元组(tuple)类型等)。

二、创建方式

# 正确创建方法
empty_set = set()          # 空集合
num_set = {1, 2, 3}        # 直接初始化
list_set = set([1,2,2,3])  # 列表转集合 → {1,2,3}

# 错误示范
not_set = {}               # 实际创建的是字典

三、元素操作

1、添加元素

(1)add(element)

  • 功能:添加单个元素
  • 特性:时间复杂度O(1)
  • 注意:元素必须可哈希
s = {1, 2}
s.add("apple")     # 添加字符串
print(s)           # 输出:{1, 2, 'apple'}
s.add([1,2])       # 报错!列表不可哈希

(2)update(iterables)

  • 功能:批量添加可迭代对象元素
  • 参数:支持多个可迭代参数
  • 返回值:None(直接修改原集合)
s = {1, 2}
s.update([3,4], "ab", (5,))
print(s)  # 输出:{1, 2, 3, 4, 5, 'a', 'b'}

2、删除元素

(1)remove(element)

  • 功能:精确删除指定元素
  • 风险:元素不存在时触发KeyError
s = {1,2,3}
s.remove(2)     # 成功 → {1,3}
s.remove(5)     # KeyError: 5

(2)discard(element)

  • 功能:安全删除元素
  • 优点:元素不存在时不报错
s = {1,2,3}
s.discard(2)    # 成功 → {1,3}
s.discard(5)    # 静默失败

(3)pop( )

  • 特性:随机删除元素(因集合无序)
  • 返回值:被删除的元素
  • 风险:空集合调用触发KeyError
s = {'a', 'b', 'c'}
val = s.pop()   # 可能返回任意元素
print(f"删除的元素:{val}") 

(4)clear( )

  • 功能:清空所有元素
  • 内存:保留集合对象
s = {1,2,3}
s.clear()
print(s)  # 输出:set()

四、集合运算

1、标准运算方法

(1)并集运算 union(*others)

a = {1,2}; b = {2,3}
result = a.union(b)        # {1,2,3}
# 等效运算符 |
print(a | b | {4})         # {1,2,3,4}

(2)交集运算 intersection(*others)

a = {1,2,3}; b = {2,3,4}
print(a.intersection(b))   # {2,3}
# 多集合操作
print(a & b & {2,5})       # {2}

(3)差集运算 difference(*others)

a = {1,2,3}; b = {2,4}
print(a.difference(b))      # {1,3}
# 连续减法
print(a.difference(b, {3})) # {1}

五、集合关系判断

1、包含关系

(1)issubset(other)

{2}.issubset({1,2,3})  # True
{1,2}.issubset({1})    # False

(2)issuperset(other)

{1,2,3}.issuperset({2,3})  # True
{2,3}.issuperset({1,2,3})  # False

2、互斥判断

(1)isdisjoint(other)

# 用户标签系统应用示例
user_tags = {"python", "AI"}
article_tags = {"java", "database"}
if user_tags.isdisjoint(article_tags):
    print("无关联内容")

六、不可变集合frozenset

1、特性说明

  • 禁止修改操作
  • 可哈希特性 → 可作为字典键
  • 继承所有非破坏性集合方法

2、使用示例

fs = frozenset([1,2,3])
new_fs = fs.union({4})  # 创建新对象
dict_key = {fs: "value"}  # 合法字典键

七、最佳实践场景

1、数据去重

# 快速去重并保持顺序
def deduplicate(items):
    seen = set()
    return [x for x in items if not (x in seen or seen.add(x))]

2、关系验证

# 权限系统示例
user_roles = {"admin", "editor"}
required_roles = {"admin"}
if required_roles.issubset(user_roles):
    print("权限验证通过")

3、海量数据查找

# 10万级数据快速存在性检测
big_data = set(range(100000))
print(99999 in big_data)  # 毫秒级响应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值