集合(Set)的使用场景与习惯养成指南
集合是Python中非常实用但经常被初学者忽视的数据结构。下面我将通过实际场景说明何时该想到用集合,以及如何培养使用集合的思维习惯。
一、什么时候应该想到用集合?
1. 需要快速判断元素是否存在时
# 列表方式(O(n)时间复杂度)
items_list = [1, 2, 3, 4, 5]
if 3 in items_list: # 需要遍历整个列表print("Found")# 集合方式(O(1)时间复杂度)
items_set = {1, 2, 3, 4, 5}
if 3 in items_set: # 直接哈希查找print("Found")
2. 需要去除重复元素时
names = ["Alice", "Bob", "Alice", "Charlie"]
unique_names = list(set(names)) # ["Alice", "Bob", "Charlie"]
3. 需要集合运算时
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}
4. 需要记录已处理项时
visited = set()
for item in data_stream:if item not in visited:process(item)visited.add(item)
二、如何培养使用集合的习惯?
1. 将常见列表操作转为集合操作
场景转换表:
列表操作 | 集合替代方案 | 优势 |
---|---|---|
if x in list | if x in set | 从O(n)到O(1) |
len(set(list)) | 直接len(set) | 自动去重计数 |
手动去重 | list(set(data)) | 一行代码解决 |
2. 识别集合特征问题
当遇到以下特征的问题时,优先考虑集合:
- 需要"唯一性"保证
- 需要频繁检查元素是否存在
- 需要比较两组数据的异同
- 数据顺序不重要
3. 日常练习示例
示例1:共同好友
friends_alice = {"Bob", "Charlie", "Diana"}
friends_bob = {"Alice", "Charlie", "Eve"}common = friends_alice & friends_bob # {"Charlie"}
示例2:数据清洗
# 去除重复记录的同时保留原始顺序
from collections import OrderedDict