飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 Python简介

    • Python是什么
    • 安装与运行
    • 交互式解释器
    • 注释与编码规范
  • 第2章 变量与数据类型

    • 变量与对象
    • 整数 int
    • 浮点数 float
    • 复数 complex
    • 布尔值 bool
    • 字符串 str
    • 空值 None
    • 类型转换
  • 第3章 运算符与表达式

    • 算术运算符
    • 比较运算符
    • 赋值运算符
    • 逻辑运算符
    • 位运算符
    • 身份与成员运算符
    • 海象运算符
    • 运算符优先级
  • 第4章 流程控制

    • if 语句
    • if-else 语句
    • if-elif-else 语句
    • match-case 语句
    • 条件表达式(三元运算符)
    • while 循环
    • for 循环
    • range 函数
    • break 与 continue
    • 循环的 else 子句
    • pass 语句
  • 第5章 数据结构

    • 列表创建与索引
    • 列表方法
    • 列表推导式
    • 元组
    • 序列解包
    • 集合
    • 字典创建与访问
    • 字典方法
    • 字典推导式
    • range 对象
  • 第6章 函数

    • 定义函数
    • 位置参数与关键字参数
    • 默认参数
    • 可变参数
    • 解包实参
    • 函数返回值
    • lambda 表达式
    • 文档字符串与注解
    • 作用域与命名空间
    • global 与 nonlocal
  • 第7章 模块与包

    • 模块导入
    • 模块搜索路径
    • 包与相对导入
    • 标准库概览
  • 第8章 文件与输入输出

    • 文件读写
    • 上下文管理器
    • 字符串格式化
    • JSON 与 CSV
  • 第9章 面向对象

    • 类与对象
    • 方法
    • 实例变量与类变量
    • 私有变量
    • 继承
    • 多重继承
    • 魔术方法
    • 属性装饰器
    • 数据类 dataclass
  • 第10章 异常处理

    • 语法错误与异常
    • try-except
    • 异常链与 raise
    • 清理操作
    • 自定义异常
  • 第11章 迭代器与生成器

    • 迭代器协议
    • 生成器
    • 生成器表达式
    • 迭代工具
  • 第12章 高级特性

    • 装饰器
    • 函数式编程
  • 第13章 工程实践

    • 测试与调试
    • 代码质量
    • 虚拟环境

集合

集合(set)是由不重复元素组成的无序容器。核心用途包括成员检测和消除重复元素,同时支持数学上的并集、交集、差集、对称差等运算。集合底层基于哈希表实现,成员检测的平均时间复杂度为 O(1)。

创建集合

非空集合可用花括号 {} 创建:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)    # {'orange', 'banana', 'pear', 'apple'},重复自动去重

空集合只能用 set() 创建,{} 创建的是空字典:

empty = set()     # ✅ 空集合
not_set = {}      # ❌ 这是空字典

set() 可从任何可迭代对象创建集合,常用于列表去重:

nums = [1, 2, 2, 3, 3, 3]
set(nums)         # {1, 2, 3}
set("abracadabra")  # {'a', 'r', 'b', 'c', 'd'}

注意,集合去重会丢失原始顺序。Python 3.7+ 中如需保持顺序去重,可用 list(dict.fromkeys(nums))。

成员检测

集合的成员检测 in 平均为 O(1),远快于列表的 O(n):

basket = {'apple', 'orange', 'pear'}
'orange' in basket      # True
'crabgrass' in basket   # False

集合运算

集合支持丰富的数学运算,既有运算符写法,也有方法调用写法:

a = set('abracadabra')   # {'a', 'r', 'b', 'c', 'd'}
b = set('alacazam')      # {'a', 'l', 'c', 'z', 'm'}

a | b                    # 并集:{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b                    # 交集:{'a', 'c'}
a - b                    # 差集:{'r', 'd', 'b'}
a ^ b                    # 对称差:{'r', 'd', 'b', 'm', 'z', 'l'}

子集和超集判断:

a = {1, 2}
b = {1, 2, 3}
a < b              # True,真子集
a <= b             # True,子集
b > a              # True,真超集
a.isdisjoint({4, 5})  # True,无共同元素

集合方法:增删改查

s = {1, 2, 3}

s.add(4)           # 添加单个元素
s.update([5, 6])  # 批量添加,接受列表、集合、range等
s.remove(3)        # 删除,不存在时抛出 KeyError
s.discard(99)      # 安全删除,不存在时不报错
s.pop()            # 随机删除并返回一个元素,空集合报错
s.clear()          # 清空

frozenset

frozenset 是集合的不可变版本,可哈希,能作为字典的键或其他集合的元素:

frozen = frozenset(['a', 'b', 'c'])
d = {frozen: "letters"}
s = {frozenset([1, 2]), frozenset([3, 4])}

支持所有非修改性集合运算,返回新的 frozenset 对象。

集合推导式

语法为 {expression for item in iterable if condition}:

{x for x in 'abracadabra' if x not in 'abc'}  # {'r', 'd'}
{w.lower() for w in ['Apple', 'Banana']}      # {'apple', 'banana'}

元素类型限制

集合只能存放可哈希的不可变元素:

s = set()
s.add([1, 2])      # TypeError: unhashable type: 'list'
s.add((1, 2))      # ✅,元组可哈希
上一页
序列解包
下一页
字典创建与访问