Python集合完整学习指南¶
1. 什么是集合?想象一下...¶
想象你有一个神奇的收藏盒!这个收藏盒有些特别: - 每个宝贝都是独一无二的(不能重复) - 宝贝们不在乎放在哪个位置(无序) - 可以随时添加新的宝贝(但不能重复) - 可以快速检查某个宝贝是否在盒子里 - 可以和其他收藏盒比较、合并
在Python中,我们把这个神奇的收藏盒叫做"集合"(Set)!
2. 基本操作¶
2.1. 创建集合¶
# 直接创建集合
fruits = {"苹果", "香蕉", "橙子"}
# 从列表创建集合(自动去重)
numbers = set([1, 2, 2, 3, 3, 4]) # 结果是{1, 2, 3, 4}
# 创建空集合(不能用{},那是空字典)
empty_set = set()
2.2. 添加元素¶
fruits = {"苹果", "香蕉"}
# 添加单个元素
fruits.add("橙子")
# 添加多个元素
fruits.update(["草莓", "葡萄"])
2.3. 删除元素¶
# 删除指定元素(元素不存在会报错)
fruits.remove("香蕉")
# 安全删除(元素不存在不会报错)
fruits.discard("梨子")
# 随机删除并返回一个元素
random_fruit = fruits.pop()
# 清空集合
fruits.clear()
3. 集合运算¶
3.1. 基本集合运算¶
set1 = {"苹果", "香蕉", "橙子"}
set2 = {"香蕉", "葡萄", "草莓"}
# 并集(所有不重复的元素)
union_set = set1 | set2 # 或使用 set1.union(set2)
# 交集(共同的元素)
intersection_set = set1 & set2 # 或使用 set1.intersection(set2)
# 差集(set1有但set2没有的)
difference_set = set1 - set2 # 或使用 set1.difference(set2)
# 对称差集(不同时存在于两个集合中的元素)
symmetric_diff = set1 ^ set2 # 或使用 set1.symmetric_difference(set2)
3.2. 集合关系判断¶
# 子集判断
small_set = {"苹果", "香蕉"}
is_subset = small_set <= set1 # True
# 超集判断
is_superset = set1 >= small_set # True
# 相等判断
is_equal = set1 == set2 # False
# 不相交判断
is_disjoint = set1.isdisjoint(set2) # 如果没有共同元素则为True
3.3. 集合推导式¶
# 创建1-5的平方数集合
squares = {x**2 for x in range(1, 6)} # {1, 4, 9, 16, 25}
# 创建所有元音字母集合
vowels = {char for char in 'hello world' if char in 'aeiou'}
4.实战示例¶
4.1. 标签系统¶
# 用户标签管理
user_tags = {
"user1": {"python", "web", "数据库"},
"user2": {"python", "人工智能", "机器学习"},
"user3": {"web", "前端", "设计"}
}
# 找出共同兴趣
def find_common_interests(user1, user2):
return user_tags[user1] & user_tags[user2]
# 找出所有技能
def get_all_skills():
all_skills = set()
for tags in user_tags.values():
all_skills.update(tags)
return all_skills
print(find_common_interests("user1", "user2")) # {'python'}
print(get_all_skills()) # 所有不重复的技能
4.2. 数据去重系统¶
# 访问记录去重
def unique_visitors(log_entries):
visitors = set()
for entry in log_entries:
visitors.add(entry["user_id"])
return len(visitors)
# 示例使用
logs = [
{"user_id": "001", "page": "/home"},
{"user_id": "002", "page": "/about"},
{"user_id": "001", "page": "/contact"}
]
unique_count = unique_visitors(logs)
print(f"独立访客数:{unique_count}") # 输出:2
5. 应用场景¶
5.1. 数据去重¶
- 用户ID去重
- 日志记录去重
- 关键词提取
5.2. 成员资格测试¶
- 权限验证
- 黑白名单
- 有效值检查
5.3. 集合运算¶
- 共同好友查找
- 标签匹配
- 数据比对
6. 小练习¶
- 创建两个集合,分别包含五个数字,然后计算它们的交集、并集和差集
- 编写一个函数,接受一个字符串,返回其中所有不重复的字符集合
- 实现一个简单的标签推荐系统,基于用户已有标签推荐相关标签