上一篇
Python Set集合完全指南:从基础到高级应用 | Python集合教程
- Python
- 2025-07-29
- 1668
Python Set集合完全指南
掌握Python集合的核心操作、应用场景和高效使用技巧
Python集合简介
在Python中,set是一种无序、不重复元素的可变集合。它是处理唯一值集合的理想数据结构,支持数学意义上的集合操作。
集合的主要特性:
- 元素唯一性(自动去重)
- 无序存储(不支持索引访问)
- 可变类型(可以添加/删除元素)
- 支持集合运算(并集、交集等)
- 元素必须是不可变类型(可哈希)
创建Python集合
1. 使用花括号创建
# 创建包含元素的集合 fruits = {"apple", "banana", "cherry", "apple"} print(fruits) # 输出: {'apple', 'banana', 'cherry'}
注意: 创建空集合不能使用 {}
(这表示空字典),而应该使用 set()
2. 使用set()构造函数
# 从列表创建集合 numbers = set([1, 2, 3, 2, 1]) print(numbers) # 输出: {1, 2, 3} # 从字符串创建集合(获取唯一字符) letters = set("programming") print(letters) # 输出: {'p', 'r', 'o', 'g', 'a', 'm', 'i', 'n'} # 创建空集合 empty_set = set()
集合基本操作
添加元素
colors = {"red", "green"} colors.add("blue") # 添加单个元素 colors.update(["yellow", "purple"]) # 添加多个元素 print(colors) # 输出: {'red', 'green', 'blue', 'yellow', 'purple'}
删除元素
numbers = {1, 2, 3, 4, 5} numbers.remove(3) # 删除存在的元素 numbers.discard(10) # 删除不存在的元素不会报错 popped = numbers.pop() # 随机删除并返回一个元素 numbers.clear() # 清空集合
成员检查
vowels = {'a', 'e', 'i', 'o', 'u'} print('a' in vowels) # True print('b' not in vowels) # True
集合长度
unique_numbers = {2, 4, 6, 8, 10} print(len(unique_numbers)) # 输出: 5
集合运算
Python集合支持丰富的数学集合运算,是处理集合数据的高效工具。
并集 (Union)
包含两个集合的所有唯一元素
A = {1, 2, 3} B = {3, 4, 5} print(A | B) # 使用运算符: {1, 2, 3, 4, 5} print(A.union(B)) # 使用方法: {1, 2, 3, 4, 5}
交集 (Intersection)
包含两个集合共有的元素
A = {1, 2, 3} B = {3, 4, 5} print(A & B) # 使用运算符: {3} print(A.intersection(B)) # 使用方法: {3}
差集 (Difference)
包含在第一个集合但不在第二个集合的元素
A = {1, 2, 3} B = {3, 4, 5} print(A - B) # 使用运算符: {1, 2} print(A.difference(B)) # 使用方法: {1, 2}
对称差集 (Symmetric Difference)
包含两个集合中不重复的元素
A = {1, 2, 3} B = {3, 4, 5} print(A ^ B) # 使用运算符: {1, 2, 4, 5} print(A.symmetric_difference(B)) # 使用方法: {1, 2, 4, 5}
常用集合方法
方法 | 描述 | 示例 |
---|---|---|
copy() |
创建集合的浅拷贝 | new_set = old_set.copy() |
isdisjoint() |
检查两个集合是否没有共同元素 | A.isdisjoint(B) |
issubset() |
检查一个集合是否是另一个的子集 | A.issubset(B) |
issuperset() |
检查一个集合是否是另一个的超集 | A.issuperset(B) |
intersection_update() |
更新集合,只保留共同元素 | A.intersection_update(B) |
集合的实际应用场景
1. 高效去重
# 从列表中去除重复项 names = ["Alice", "Bob", "Alice", "Charlie", "Bob"] unique_names = list(set(names)) print(unique_names) # 输出: ['Alice', 'Bob', 'Charlie']
2. 成员关系测试
# 检查用户名是否已被使用 existing_users = {"alice123", "bob2023", "charlie_"} username = "bob2023" if username in existing_users: print("用户名已被使用,请选择其他用户名")
3. 查找共同元素
# 找出两个用户的共同好友 user1_friends = {"Alice", "Bob", "Charlie", "David"} user2_friends = {"Bob", "David", "Eve", "Frank"} common_friends = user1_friends & user2_friends print(common_friends) # 输出: {'Bob', 'David'}
4. 数据过滤
# 过滤出只在一个集合中出现的元素 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} unique_to_set1 = set1 - set2 print(unique_to_set1) # 输出: {1, 2, 3}
冻结集合 (frozenset)
frozenset是set的不可变版本,可用作字典的键或另一个集合的元素。
创建frozenset
# 创建冻结集合 frozen = frozenset([1, 2, 3, 2, 1]) print(frozen) # 输出: frozenset({1, 2, 3}) # 尝试修改会引发错误 # frozen.add(4) # AttributeError
作为字典的键
# 使用frozenset作为字典的键 graph = {} node_set = frozenset({"A", "B"}) graph[node_set] = 10 print(graph) # 输出: {frozenset({'A', 'B'}): 10}
性能考虑与最佳实践
集合操作的时间复杂度
- 成员测试(in操作):平均O(1)
- 添加元素(add):平均O(1)
- 删除元素(remove/discard):平均O(1)
- 并集/交集/差集:O(len(s) + len(t))
最佳实践
- 当需要检查成员存在性时,优先使用集合而非列表
- 使用集合推导式创建集合:
{x for x in iterable}
- 对大型数据集去重时,集合比列表更高效
- 避免在集合中存储可变对象(如列表、字典)
- 当需要不可变集合时,使用frozenset
Python集合总结
高效去重
自动处理唯一值
快速查找
O(1)成员测试
集合运算
并集、交集等操作
灵活应用
数据过滤、关系测试
掌握Python集合将大大提高你在数据处理和算法实现中的效率!
本文由BeiYue于2025-07-29发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256775.html
发表评论