Python 集合(Set)用法,涵盖基本操作、集合运算、常用方法及特性

2025-05-08 11 0

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. 注意事项

  1. 元素类型限制

    • 集合元素必须是可哈希类型(如数字、字符串、元组),不可包含列表、字典等不可哈希对象。

  2. 性能优势

    • 集合的成员检查(in 操作)时间复杂度为 O(1),远快于列表的 O(n)。

  3. 不可变集合

    • 使用 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

相关文章

Python 元组(Tuple)用法的总结,涵盖基本操作、特性及常见应用场景
Python中列表(List)的操作用法
Python中print和input用法总结
大道至简
如何在WordPress网站文章中不用插件直接引用插入哔哩哔哩bilibili视频
记录下孩子的荣誉

发布评论