📚 Python 集合(Set)全面学习指南 集合(Set)是 Python 中用于存储唯一元素 且无序 的数据结构,支持高效的成员检测和集合运算(交集、并集等)。系统性知识整理,涵盖基础操作、高级技巧和实际应用。
一、集合基础
1. 创建集合
empty_set = set ( )
numbers = { 1 , 2 , 3 , 4 , 5 }
letters = set ( "hello" )
data = [ 2 , 3 , 2 , 5 , 3 ]
unique_data = set ( data)
二、集合操作与方法
1. 增删元素
方法 功能 示例 add(x)
添加单个元素 numbers.add(6)
→ {1,2,3,4,5,6}update(iter)
合并可迭代对象的元素 numbers.update([7,8])
remove(x)
删除元素(不存在时报错) numbers.remove(3)
discard(x)
安全删除元素(不报错) numbers.discard(10)
pop()
随机删除并返回一个元素 element = numbers.pop()
clear()
清空集合 numbers.clear()
2. 集合运算
操作 符号 方法 示例 并集 (Union)` ` union()
交集 (Intersection)&
intersection()
a & b
或 a.intersection(b)
差集 (Difference)-
difference()
a - b
或 a.difference(b)
对称差集 (Symmetric)^
symmetric_difference()
a ^ b
或 a.symmetric_difference(b)
a = { 1 , 2 , 3 }
b = { 3 , 4 , 5 } print ( a | b)
print ( a & b)
print ( a - b)
print ( a ^ b)
3. 关系判断
方法 功能 示例 issubset()
判断是否为子集 a.issubset(b)
issuperset()
判断是否为超集 a.issuperset(b)
isdisjoint()
判断是否无交集 a.isdisjoint(b)
a = { 1 , 2 }
b = { 1 , 2 , 3 }
print ( a. issubset( b) )
print ( b. issuperset( a) )
三、高级特性与技巧
1. 集合推导式
squares = { x** 2 for x in [ 1 , - 1 , 2 , - 2 , 3 ] }
numbers = { 1 , 2 , 3 , 4 , 5 }
even = { x for x in numbers if x % 2 == 0 }
2. 不可变集合 frozenset
fs = frozenset ( [ 1 , 2 , 3 ] )
valid_keys = { fs: "value" }
nested_set = { fs, frozenset ( [ 4 , 5 ] ) }
3. 性能优势
成员检测 x in set
: O(1) 时间复杂度 (列表为 O(n))去重效率 :集合比遍历列表检测重复更快。
from timeit import timeitlist_time = timeit( "1000000 in lst" , setup= "lst = list(range(1000000))" , number= 100 )
set_time = timeit( "1000000 in s" , setup= "s = set(range(1000000))" , number= 100 ) print ( f"列表检测时间: { list_time: .6f } s" )
print ( f"集合检测时间: { set_time: .6f } s" )
四、实际应用案例
1. 数据去重
def deduplicate_ordered ( lst) : seen = set ( ) return [ x for x in lst if not ( x in seen or seen. add( x) ) ] data = [ 2 , 3 , 2 , 5 , 3 ]
print ( deduplicate_ordered( data) )
2. 共同兴趣发现
user1 = { "音乐" , "电影" , "读书" }
user2 = { "读书" , "旅行" , "美食" }
user3 = { "电影" , "读书" , "游戏" } common_interests = user1 & user2 & user3
print ( common_interests)
3. 权限管理系统
required_permissions = { "read" , "write" }
user_permissions = { "read" , "execute" } if required_permissions. issubset( user_permissions) : print ( "权限足够" )
else : missing = required_permissions - user_permissionsprint ( f"缺少权限: { missing} " )
五、常见问题与误区
1. 空集合的创建
错误用法 : empty_set = {}
→ 创建的是空字典正确用法 : empty_set = set()
2. 集合中元素的类型限制
3. 集合无序性带来的问题
s = { 3 , 1 , 2 }
print ( s)
六、总结
场景 推荐数据结构 原因 需要唯一元素 集合 (set
) 自动去重,高效成员检测 保持插入顺序 列表 (list
) 集合是无序的 键值对存储 字典 (dict
) 集合不存储键值对
掌握集合的用法后,可显著优化需要去重或集合运算的代码逻辑!