1. Python集合基础
1.1 集合的定义与特性
集合(Set)是Python中用于存储无序、不重复元素的容器类型。其核心特性:
元素唯一性(自动去重)
无序存储(无索引访问)
支持数学集合运算
可变对象(frozenset为不可变版本)
1.2 集合创建方式
# 空集合
empty_set = set()
# 带初始值的集合
numbers = {1, 2, 3, 4}
# 从列表转换
colors = set(['red', 'blue', 'green'])
# 集合推导式
squares = {x**2 for x in range(10)}
表1 集合创建方法对比
2. 集合核心操作
2.1 基本操作方法添加元素
# add() 方法
fruits = {'apple', 'banana'}
fruits.add('orange') # 添加单个元素
# update() 方法
fruits.update(['kiwi', 'mango']) # 添加多个元素
删除元素
# remove() vs discard()
fruits.remove('apple') # 元素不存在会报KeyError
fruits.discard('grape') # 元素不存在不报错
# pop() 随机删除
random_fruit = fruits.pop()
# clear() 清空集合
fruits.clear()
2.2 集合运算
表2 集合运算符与方法对比
2.3 集合关系判断
A = {1, 2, 3}
B = {2, 3}
print(B.issubset(A)) # True
print(A.issuperset(B)) # True
print(A.isdisjoint({4,5})) # True
3. 高级集合操作
3.1 集合推导式
# 生成不重复的随机数集合
import random
random_set = {random.randint(1, 100) for _ inrange(200)}
print(len(random_set)) # 结果<=100
# 过滤素数
defis_prime(n):
return n > 1andall(n % i for i inrange(2, int(n**0.5)+1))
prime_set = {x for x inrange(2, 100) if is_prime(x)}
3.2 frozenset不可变集合
immutable = frozenset([1, 2, 3])
try:
immutable.add(4)
except AttributeError as e:
print(e) # 'frozenset' object has no attribute 'add'
4. 性能分析与优化
表3 操作时间复杂度对比
*注:列表的append操作时间复杂度为O(1)
典型应用场景
快速去重
成员关系测试
数据交并差运算
状态标记
5. 实践案例
案例1:文本处理
def count_unique_words(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return len({word.lower() for line in f for word in line.split()})
print(f"Unique words: {count_unique_words('article.txt')}")
案例2:用户标签系统
class UserTagSystem:
def__init__(self):
self.users = {}
defadd_tags(self, user_id, *tags):
if user_id notinself.users:
self.users[user_id] = set()
self.users[user_id].update(tags)
defcommon_tags(self, user1, user2):
returnself.users[user1] & self.users[user2]
# 使用示例
system = UserTagSystem()
system.add_tags(1, 'python', 'coding', 'music')
system.add_tags(2, 'python', 'travel')
print(system.common_tags(1, 2)) # {'python'}
6. 扩展应用
使用sympy进行数学集合运算
from sympy import FiniteSet, Union, Intersection
A = FiniteSet(1, 2, 3)
B = FiniteSet(2, 3, 4)
print(Union(A, B)) # {1, 2, 3, 4}
print(Intersection(A, B)) # {2, 3}
7. 学习路线图
8. 总结
集合编程优势:
高效去重和成员检测
直观的数学运算表达
内存使用优化
使用注意事项:
不要依赖元素顺序
只能存储可哈希对象
大型集合操作注意内存消耗
扩展学习方向:
数据库中的集合操作
分布式集合处理
集合论在算法中的应用
更新日期:2025-05-24
交流讨论:欢迎在评论区留言!
重要提示:本文主要是记录自己的学习与实践过程,所提内容或者观点仅代表个人意见,只是我以为的,不代表完全正确,不喜请勿关注。