Python 集合速查:去重、并交差运算一文掌握
在 Python 的数据结构中,集合(set)常常被忽视,但它在数据去重、数学运算以及快速查找方面有着不可替代的优势。本文将通过示例快速带你掌握集合的常见操作与应用场景,让你在学习和面试中都能从容应对。
一、什么是集合?
集合(set) 是一种 无序、去重、可变 的数据结构。
使用花括号 {} 或 set() 定义,元素必须是不可变对象(如数字、字符串、元组)。
定义集合
s1 = {1, 2, 3, 3, 4}
print(s1) # {1, 2, 3, 4} 自动去重
s2 = set([1, 2, 2, 3])
print(s2) # {1, 2, 3}
二、集合的常用操作
1. 增删改查
s = {1, 2, 3}
2. 添加元素
s.add(4)
print(s) # {1, 2, 3, 4}
3. 移除元素(remove 不存在会报错)
s.remove(2)
print(s) # {1, 3, 4}
4. 安全移除(discard 不存在也不会报错)
s.discard(10)
5. 随机删除一个元素
s.pop()
print(s)
6. 清空集合
s.clear()
print(s) # set()
2. 集合运算(核心)
集合天然支持数学运算,常用于数据处理:
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # 并集 {1, 2, 3, 4, 5}
print(a & b) # 交集 {3}
print(a - b) # 差集 {1, 2}
print(a ^ b) # 对称差集 {1, 2, 4, 5}
三、集合的应用场景
1. 数据去重
nums = [1, 2, 2, 3, 4, 4, 5]
unique = list(set(nums))
print(unique) # [1, 2, 3, 4, 5]
2. 成员关系判断
集合查找的时间复杂度接近 O(1),比列表更快:
fruits = {"apple", "banana", "cherry"}
print("apple" in fruits) # True
print("orange" in fruits) # False
3. 多集合数据处理
适用于标签筛选、关键词匹配等场景:
skills_a = {"Python", "SQL", "Linux"}
skills_b = {"Python", "Java", "C++"}
print(skills_a & skills_b) # {'Python'} 两人共有技能
print(skills_a - skills_b) # {'SQL', 'Linux'} A独有技能
4. 去除重复字符
s = "hello world"
print(set(s)) # {'h', 'd', 'l', 'o', 'r', 'e', ' ', 'w'}
四、集合面试常见考点
1. 集合与列表的区别
列表:有序,可重复。
集合:无序,不可重复,查找效率高。
2. 集合是否可作为字典的键?
不行,因为集合是可变类型。
但 冻结集合(frozenset) 是不可变的,可以作为字典键。
fs = frozenset([1, 2, 3])
d = {fs: "immutable set"}
print(d) # {frozenset({1, 2, 3}): 'immutable set'}
3. 集合运算的时间复杂度
并集、交集、差集等操作通常在 O(n) 时间内完成,效率高于列表嵌套循环。
五、总结
集合是 去重利器,并且支持 并集、交集、差集、对称差集 等数学运算。
常见应用包括 数据去重、快速查找、多集合处理。
面试中高频考点包括 集合与列表区别、frozenset 的使用 以及 集合运算原理。
熟练掌握集合操作,可以让你在实际开发与算法题中快速解决问题。