第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

值模型

 

posted on 2018-06-07 09:04  秦梦超  阅读(97)  评论(0编辑  收藏  举报

导航