第3.5章 数据结构与算法——CookBook笔记

序列分解为单个变量:解包

可迭代对象就可以执行分解

字符串,文件,迭代器,生成器

_丢弃值

分解值过多(未知):*表达式

*用于迭代变长元组序列

保存最后n个元素:

保存有限历史记录

collections.deque

编写搜索某项记录的代码,用yield生成器函数

处理搜索的代码与使用搜索结果的代码 解耦合

指定长度deque:自动移除最老的记录

无限队列:双端

找到最大最小n个元素

heapq

nlargest nsmallest

可接受参数'key',对付更复杂的数据结构 

随着n变大

min,max

nlargest nsmallest

sort 切片

实现优先队列

heapq:引入额外的索引

一键多值字典:

值:列表,集合

defaultdict(list/set)

自己模拟,会有混乱代码

检测键是否存在

  值初始化为空列表

  append

字典保存有序

OrderedDict 保持元素添加序

双向链表,两倍空间

字典有关的计算问题

构建(value,key)相反元组

zip打包

传递给min max sorted

zip创建的是迭代器

#迭代器:遍历的提前结束

字典默认操作是基于key的

复合语义:寻找值,与其对应的key

打包比较,返回的是两个关键字的比较结果

两个字典寻找相同点

keys items

集合运算

可用于过滤键

value不满足集合定义,需先转换为集合

移除序列重复项,保持顺序不变

值可哈希

集合+生成器

不可哈希:序列

指定hash函数key

可哈希对象:生存期内不可变,有一个__hash__方法:整数,浮点数,字符串,元组

不可哈希列表可不可以直接调用set?指定key?

对切片命名

避免硬编码索引

slice()切片对象

属性:start,stop,step

indices(size)

切片映射到特定大小的序列,返回(start,stop,step)

保持步长,自动生成边界??

序列中出现次数最多的元素

collections模块 counter类(传入可哈希对象)

most_common()方法

手动增加计数 update

重载了+-

通过公共关键字对字典列表排序

operator函数 itemgetter函数

提取关键字

sorted关键字参数key,表示可调用对象,返回排序依据的值

不原生支持比较

lamda u:u.id

operator.attrgetter快,允许提取多个值

根据字段将记录分组

itertools.groupby,返回值与一个迭代器

扫描出序列中的相同值的序列项

需要事先排序

分组,随机访问:多值字典

defaultdict

筛选序列中元素

[列表推导式]

(生成器表达式)

filter:返回迭代器

替换值:条件表达式

compress,布尔元素迭代器

从字典提取子集

字典推导式,效率

名称映射到序列中元素

命名元组

collections.namedtuple

将代码与控制的元素解耦

相对于字典:空间效率

_replace修改属性,创建并返回全新元组

高效,支持修改属性:__slots__属性的类

数据转换+换算

生成器表达式

生成器表达式作为函数的唯一参数,不必重复使用括号

不需要临时列表,内存优化

合并多个映射

collections模块ChainMap类

维护映射关系的列表

引用模型

new_child

字典update

值模型

原文地址:https://www.cnblogs.com/qmcj/p/9148865.html