1. 集合基础
-
定义:用花括号
{}
或set()
创建,元素无序且唯一(自动去重)。 -
s1 = {1, 2, 3} # 直接定义 s2 = set([1, 2, 2, 3]) # 从列表转换 → {1, 2, 3} empty_set = set() # 空集合(不能使用 {},它是空字典)
2. 集合操作
(1) 增删元素
方法/操作 | 语法 | 示例 | 说明 |
---|---|---|---|
添加元素 | set.add(element) |
s1.add(4) → {1,2,3,4} |
添加单个元素 |
批量添加 | set.update(iterable) |
s1.update([5,6]) → {1,2,3,4,5,6} |
合并可迭代对象 |
删除元素 | set.remove(element) |
s1.remove(3) → {1,2} |
元素不存在时报错 |
安全删除 | set.discard(element) |
s1.discard(99) → 无变化 |
元素不存在时不报错 |
随机删除 | set.pop() |
s1.pop() → 删除并返回任意元素 |
空集合时报错 |
清空集合 | set.clear() |
s1.clear() → set() |
清空所有元素 |
(2) 集合运算
运算/方法 | 语法 | 示例 | 说明 |
---|---|---|---|
并集 | set1 | set2 或 set1.union(set2) |
{1,2} | {2,3} → {1,2,3} |
合并两集合所有元素 |
交集 | set1 & set2 或 set1.intersection(set2) |
{1,2} & {2,3} → {2} |
返回共有元素 |
差集 | set1 - set2 或 set1.difference(set2) |
{1,2} - {2,3} → {1} |
返回仅存在于 set1 的元素 |
对称差集 | set1 ^ set2 或 set1.symmetric_difference(set2) |
{1,2} ^ {2,3} → {1,3} |
返回非共有元素(异或) |
子集检查 | set1 <= set2 或 set1.issubset(set2) |
{1,2} <= {1,2,3} → True |
判断 set1 是否为 set2 子集 |
超集检查 | set1 >= set2 或 set1.issuperset(set2) |
{1,2,3} >= {1,2} → True |
判断 set1 是否为 set2 超集 |
无交集检查 | set1.isdisjoint(set2) |
{1,2}.isdisjoint({3,4}) → True |
判断两集合是否无交集 |
(3) 常用方法
方法 | 语法 | 示例 | 说明 |
---|---|---|---|
拷贝集合 | set.copy() |
s2 = s1.copy() |
浅拷贝 |
元素数量 | len(set) |
len({1,2,3}) → 3 |
返回元素个数 |
存在性检查 | element in set |
2 in {1,2,3} → True |
判断元素是否在集合中 |
3. 集合特性
(1) 唯一性
-
自动去除重复元素:
-
s = {1, 2, 2, 3} # 实际存储 {1, 2, 3}
(2) 无序性
-
元素无固定顺序,不支持索引访问:
-
s = {3, 1, 2} # print(s[0]) → 报错:TypeError
(3) 可哈希性
-
集合本身不可哈希(不能作为字典键),但
frozenset
可以: -
frozen = frozenset({1, 2, 3}) d = {frozen: "value"} # 合法
4. 集合推导式
-
类似列表推导式,生成新集合:
-
s = {x**2 for x in [1, 2, 3]} # {1, 4, 9}
5. 应用场景
-
快速去重
-
unique_list = list(set([1, 2, 2, 3])) # [1, 2, 3](顺序可能丢失)
- 高效成员检查
-
if user_id in allowed_ids_set: # 比列表更快 grant_access()
- 数据关系运算
-
subscribers = {"Alice", "Bob"} premium_users = {"Bob", "Charlie"} common_users = subscribers & premium_users # {"Bob"}
6. 注意事项
-
元素类型限制
-
集合元素必须是可哈希类型(如数字、字符串、元组),不可包含列表、字典等不可哈希对象。
-
-
性能优势
-
集合的成员检查(
in
操作)时间复杂度为 O(1),远快于列表的 O(n)。
-
-
不可变集合
-
使用
frozenset
创建不可变集合,适用于需要哈希性的场景: -
fs = frozenset({1, 2, 3})
-
示例代码
# 创建与去重 numbers = {2, 4, 2, 6, 4} # {2, 4, 6} # 集合运算 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}(差集) # 成员检查 if 3 in A: print("3 在集合中") # 输出 # 集合推导式 even_squares = {x**2 for x in range(10) if x % 2 == 0} # {0, 4, 16, 36, 64}
总结
-
核心特性:无序、唯一、高效成员检查。
-
适用场景:去重、集合关系运算、快速查找。
-
扩展类型:
frozenset
用于不可变需求。
掌握集合操作可显著提升 Python 数据处理效率!
本站https://ygz.ink文章https://ygz.ink/archives/1939.html中提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。本站部分信息来自博主网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
邮箱:gouweicaosheji@163.com