Python数据结构与面向对象编程 - 课程提纲
一、课程基本信息
- 日期:2023年4月11日
- 主题:数据结构与面向对象编程
- 重要通知 :
- Assignment 0周四截止
- 今天是组队最后一天
- 周四开始Assignment 1(小组作业)
二、学习目标
学完本课后,学生将能够:
- 区分不同数据结构(lists、tuples、sets、dictionaries)及其属性和方法
- 根据具体任务选择合适的内置数据结构
- 设计和实现自定义Python对象(类)
三、Python内置数据结构对比
核心特性对比表
| 数据结构 | 可变性 | 有序性 | 可迭代 | 查找复杂度 | 定界符 |
|---|---|---|---|---|---|
| List | ✔ | ✔ | 遍历元素 | O(n) | [] |
| Tuple | ✘ | ✔ | 遍历元素 | O(n) | () |
| Set | ✔ | ✘ | 遍历元素 | O(1) | {} |
| Dictionary | ✔ | ✘ | 遍历键 | O(1) | {} |
1. Lists(列表)
特点:
- 可变:创建后可修改
- 有序:有第0、1、2...个元素
- 异构:可存储不同类型元素
常用方法:
.append(elem)- 添加元素 O(1).remove(elem)- 删除元素 O(n).count(elem)- 计数.index(elem)- 查找索引.sort()- 原地排序.pop(i)- 弹出元素
2. Tuples(元组)
特点:
- 不可变:创建后不可修改(因此可哈希)
- 有序:有索引顺序
- 异构:可存储不同类型元素
优势:
- 存储效率更高
- 可作为字典的键(如果包含不可变数据)
- 注意:元组存储的是不可变引用,但引用的对象可能可变
3. Sets(集合)
特点:
- 可变:可添加/删除元素
- 无序:无索引概念
- 唯一性:自动去重
- 元素必须可哈希(不可变)
数学运算:
s & t- 交集s | t- 并集s - t- 差集s ^ t- 对称差s < t- 子集判断
操作复杂度:
.add()- O(1).remove()- O(1)- 成员检查 - O(1)
4. Dictionaries(字典)
特点:
- 可变:可修改键值对
- 关联性:通过键访问值(非位置)
- 异构:键值可为不同类型
- 键唯一:每个键只能出现一次,键必须可哈希
常用方法:
.get(key, default)- 安全获取值.keys()- 获取所有键.values()- 获取所有值.items()- 获取键值对.pop(key, default)- 删除并返回值
四、集合操作常用模式
基础操作
python
len(collection) # 获取长度
for elem in collection: # 遍历元素
list("abc") # 从可迭代对象创建列表
set("abc") # 从可迭代对象创建集合
高级操作
python
# 枚举
for i, elem in enumerate(['a', 'b', 41]):
...
# 排序
sorted("cbda") # => ['a', 'b', 'c', 'd']
sorted("cbda", reverse=True) # => ['d', 'c', 'b', 'a']
# 配对组合
zip(['arpit', 'chase'], ['B+', 'A'])
# => <('arpit', 'B+'), ('chase', 'A')>
# 范围生成
range(a, b, c) # 从a到b(不含),步长为c
range(3, 10, 2) # => <3, 5, 7, 9>
五、列表推导式(Comprehensions)
基本模式
问题:返回100以下所有奇数平方数
传统方法:
python
for i in range(loop_max):
if (i ** 2) % 2 != 0:
output.append(i ** 2)
推导式方法:
python
[i ** 2 for i in range(int(num ** (1/2))) if (i ** 2) % 2 != 0]
语法结构
python
# 列表推导式
[fn(x) for x in iterable if cond(x)]
# 字典推导式
{f(k): g(v) for k, v in iterable if cond(k, v)}
解析:
[]- 方括号定义列表{}+:- 花括号+冒号定义字典fn(x)- 应用函数for x in iterable- 遍历可迭代对象if cond(x)- 可选的条件过滤
六、课程演示
filter_pixels.py- 像素过滤示例odd_squares.py- 奇数平方示例axess.py- 类的魔术方法演示
核心思想:根据数据的可变性、有序性、唯一性需求选择合适的数据结构,使用推导式简化集合操作代码。