您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python的集合类型举例分析
## 一、集合类型概述
Python中的集合(Set)是一种无序、可变且不包含重复元素的数据结构。它基于数学中的集合概念实现,提供了高效的成员检测和集合运算功能。集合类型在Python中通过`set`和`frozenset`两个内置类实现,其中:
- `set`:可变集合,创建后可增删元素
- `frozenset`:不可变集合,创建后不可修改
## 二、集合的创建与基本操作
### 1. 集合创建
```python
# 空集合必须用set()创建
empty_set = set()
# 非空集合的创建方式
nums = {1, 2, 3} # 直接使用花括号
chars = set('hello') # 从可迭代对象创建
frozen = frozenset([1, 2, 2, 3]) # 不可变集合
# 添加元素
nums.add(4) # {1, 2, 3, 4}
nums.update([5,6]) # {1, 2, 3, 4, 5, 6}
# 删除元素
nums.remove(3) # 移除存在的元素
nums.discard(10) # 安全移除(不存在不报错)
popped = nums.pop()# 随机移除一个元素
# 集合长度
print(len(nums)) # 输出当前元素数量
A = {1, 2, 3}
B = {3, 4, 5}
# 并集
union = A | B # {1, 2, 3, 4, 5}
union = A.union(B) # 等效方法
# 交集
intersect = A & B # {3}
intersect = A.intersection(B)
# 差集
diff = A - B # {1, 2}
diff = A.difference(B)
# 对称差集(仅在其中一个集合中)
sym_diff = A ^ B # {1, 2, 4, 5}
sym_diff = A.symmetric_difference(B)
X = {1, 2}
Y = {1, 2, 3}
# 子集判断
print(X <= Y) # True (X是Y的子集)
print(X.issubset(Y))
# 超集判断
print(Y >= X) # True (Y是X的超集)
print(Y.issuperset(X))
# 不相交判断
print(X.isdisjoint({4,5})) # True
# 列表去重高效方案
duplicates = [1, 2, 2, 3, 4, 4]
unique = list(set(duplicates)) # [1, 2, 3, 4]
# 比列表检测更高效
vocab = {'apple', 'banana', 'orange'}
print('pear' in vocab) # O(1)时间复杂度
# 找出两个列表的交集
customers_A = {'Alice', 'Bob', 'Charlie'}
customers_B = {'Bob', 'David', 'Eve'}
common = customers_A & custmers_B # {'Bob'}
特性 | 列表(List) | 元组(Tuple) | 字典(Dict) | 集合(Set) |
---|---|---|---|---|
有序性 | 是 | 是 | 是(Python3.7+) | 否 |
可变性 | 是 | 否 | 是 | 是(set)/否(frozenset) |
元素唯一性 | 否 | 否 | 键唯一 | 是 |
典型用途 | 有序序列存储 | 不可变数据 | 键值对存储 | 去重/集合运算 |
# 类似列表推导式
squares = {x**2 for x in range(5)} # {0, 1, 4, 9, 16}
# 不可哈希元素不能作为集合元素
invalid_set = {[1,2], [3,4]} # TypeError
# 集合本身不可哈希(frozenset可以)
valid_dict = {frozenset({1,2}): "value"}
Python的集合类型提供了强大的数据操作能力,特别适合需要快速成员检测、数据去重或数学集合运算的场景。通过合理使用集合,可以显著提升代码的简洁性和执行效率。在实际开发中,建议: 1. 优先考虑集合处理去重需求 2. 对频繁的成员检测使用集合替代列表 3. 注意集合的无序特性不适合需要保持顺序的场景 4. 根据需求选择set或frozenset “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。