【MVCD 1】

Python数据结构与面向对象编程 - 课程提纲

一、课程基本信息

  • 日期:2023年4月11日
  • 主题:数据结构与面向对象编程
  • 重要通知
    • Assignment 0周四截止
    • 今天是组队最后一天
    • 周四开始Assignment 1(小组作业)

二、学习目标

学完本课后,学生将能够:

  1. 区分不同数据结构(lists、tuples、sets、dictionaries)及其属性和方法
  2. 根据具体任务选择合适的内置数据结构
  3. 设计和实现自定义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 - 类的魔术方法演示

核心思想:根据数据的可变性、有序性、唯一性需求选择合适的数据结构,使用推导式简化集合操作代码。

相关推荐
luoluoal18 小时前
基于python的二维码生成算法研究和实现(源码+文档)
python·mysql·django·毕业设计·源码
海棠AI实验室18 小时前
专栏导读:你将交付什么、如何学、如何做作品集
python·数据挖掘
m0_6136070118 小时前
小土堆-P3-笔记
pytorch·python·深度学习
rgeshfgreh18 小时前
Python高效开发:标准库与第三方库实战指南
python
虎冯河19 小时前
阿里云 + 宝塔面板环境Python 项目从 0 到 1 部署全流
python·阿里云·云计算
鹿衔`19 小时前
PySpark 大规模造数任务优化与实施总结文档
python·pyspark
深蓝海拓19 小时前
PySide6从0开始学习的笔记(二十三)使用QRunnable在线程池中执行临时任务
笔记·python·qt·学习·pyqt
CCPC不拿奖不改名19 小时前
网络与API:HTTP基础+面试习题
网络·python·网络协议·学习·http·面试·职场和发展