读后笔记 -- Python 数据结构与算法分析 Chapter1/2:Python 基础 及算法分析
Chapter 1: Python 基础
1. 内建集合数据类型
# 1. list 相关 my_list = [1, 2, 3, 4] # big_list 包含 3 个指向 my_list 的引用 big_list = [my_list] * 3 # big_list: [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] print(big_list) my_list[2] = 45 # 修改一个元素,big_list 的3处都将改变, big_list: [[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]] print(big_list) # 2. 字符串相关 my_name = "Bruce He" # " Bruce He ",总长度 w,原字符串居中,其他空格填充 print(my_name.center(20)) # "Bruce He ",总长度 w,原字符串靠左,其他空格填充。相似的还有 string.rjust(w) print(my_name.ljust(20)) # ['Bruce ', 'e'],在 s_char 位置将字符串分割成子串 print(my_name.split("H")) # 3. string, tuple, set 不可修改 # 3.1 string try: my_name[1] = "R" except Exception as e: print(e) # 'str' object does not support item assignment print(id(my_name)) # 2287942062960 print(my_name.__add__(" great"), id(my_name)) # "Bruce He great 2414072517488", my_name 字符串的结果未变,"Bruce He great" 是拼接2个地址的结果 # 此时的 my_name 其实是另一个地址的引用 my_name = my_name.replace("r", "R") print(my_name, id(my_name)) # BRuce He 2287942062832 # 3.2 tuple my_tuple = (2, True, 4.96) try: my_tuple[1] = False except Exception as e: print(e) # 'tuple' object does not support item assignment # 3.3 set my_set = {2, True, 4.96} try: my_set[1] = False except Exception as e: print(e) # 'set' object does not support item assignment
2. Python 集合类
2.1 有序集合:list, string, tuple -- 可以通过下标访问
2.2 无序集合:dict, set
Chapter 2:算法分析
2.2 常见的大 O 函数
f(n) | 名称 |
1 | 常数 |
logn | 对数 |
n | 线性 |
n * logn | 线性对数 |
n2 | 平方 |
n3 |
立方 |
2n | 指数 |
2.3 Python 数据结构的性能
1)List 操作的大 O 效率
操作 | 大 O 效率 | 操作 | 大 O 效率 | |
索引 | O(1) | 切片 | O(k) | |
索引赋值 | O(1) | 删除切片 | O(n) | |
追加 | O(1) | 设置切片 | O(n + k) | |
pop() | O(1) | 反转 | O(1) | |
pop(i) | O(n) | 连接 | O(k) | |
insert(i, item) | O(n) | 排序 | O(n * logn) | |
删除 | O(n) | 乘法 | O(nk) | |
遍历 | O(n) | |||
包含 | O(n) |
2)字典
操作 | 大 O 效率 |
复制 | O(1) |
取值 | O(1) |
赋值 | O(1) |
删除 | O(1) |
包含 | O(1) |
遍历 | O(n) |