在 Python 的常用数据结构中,集合(set) 是一个非常实用但常被忽略的类型。它不仅能去重,还能高效地进行集合运算(交集、并集、差集等),在数据清洗、去重统计、快速查找等场景中非常有用。
本文将从 定义 → 特性 → 常用操作 → 实战案例 四个方面带你掌握集合的核心用法。
# 使用花括号
fruits = {"apple", "banana", "orange"}
# 使用 set() 构造函数
numbers = set([1, 2, 3, 3, 2]) # 自动去重
print(numbers) # {1, 2, 3}
Python 程序中的集合跟数学上的集合没有什么本质区别,需要强调的是上面所说的无序性和互异性。无序性说明集合中的元素并不像列中的元素那样存在某种次序,可以通过索引运算就能访问任意元素,集合并不支持索引运算。
另外,集合的互异性决定了集合中不能有重复元素,这一点也是集合区别于列表的地方,我们无法将重复的元素添加到一个集合中。集合类型必然是支持in
和not in
成员运算的,这样就可以确定一个元素是否属于集合,也就是上面所说的集合的确定性。
集合的成员运算在性能上要优于列表的成员运算,这是集合的底层存储特性决定的,此处我们暂时不做讨论,大家记住这个结论即可。
s = {1, 2, 3}
s.add(4) # 添加单个元素
s.update([5, 6]) # 添加多个元素
s.remove(2) # 删除元素(不存在会报错)
s.discard(10) # 删除元素(不存在不会报错)
s.clear() # 清空集合
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # 并集 {1, 2, 3, 4, 5, 6}
print(A & B) # 交集 {3, 4}
print(A - B) # 差集 {1, 2}
print(A ^ B) # 对称差集 {1, 2, 5, 6}
A = {1, 2}
B = {1, 2, 3}
print(A.issubset(B)) # True 子集
print(B.issuperset(A)) # True 超集
print(A.isdisjoint({4, 5})) # True 无交集
集合推导式与列表推导式类似,但用 {}
包裹:
squares = {x**2 for x in range(6)}
print(squares) # {0, 1, 4, 9, 16, 25}
data = [5, 3, 1, 2, 3, 5, 1]
unique_sorted = sorted(set(data))
print(unique_sorted) # [1, 2, 3, 5]
user1_friends = {"Tom", "Jerry", "Alice"}
user2_friends = {"Alice", "Bob", "Tom"}
common = user1_friends & user2_friends
print(common) # {'Tom', 'Alice'}
text = "python java python c++ java go"
words = text.split()
unique_words = set(words)
print(f"去重后单词数: {len(unique_words)}") # 4
集合是Python中非常强大的数据结构,具有去重、成员检查、集合运算等功能。它广泛应用于实际开发中,尤其是在需要高效处理数据、去重、集合运算等场景下。掌握集合的基本操作和应用,可以帮助我们更好地解决一些复杂问题。
特性 | 说明 |
---|---|
无序 | 元素没有固定顺序 |
唯一性 | 自动去重 |
可变性 | 可添加/删除元素 |
高效查找 | 判断元素是否存在的速度快 |
适用场景:
💡 星哥建议: 在处理需要去重、快速查找或集合运算的任务时,优先考虑 set
,不仅代码简洁,还能显著提升性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。