Python数据结构与算法

Python数据结构算法

一、筛选数据

0x1 列表

列表解析

filter函数:

0x2 字典

字典解析

0x3 集合

集合解析

二、元组命名

student = ('mubai',20,'male','1948877055@qq.com')
访问里面的数据用下标索引,可读性不好。

方案1:定义一系列数值常量或枚举类型

方案2:使用标准库中collections.namedtuple替代内置tuple

三、字典排序

根据成绩高低排名:
{
'LiLei':79,
'Jim':88,
'Lucy':92,
...
}

将字典中的各项转换为元组,使用内置函数sorted排序。

方案一:将字典中的项转化为(值,键)元组。(列表解析或zip )

方案二:传递sorted函数的key参数

最终排名:

四、统计频度

某随机序列找到出现次数最高的3个元素,它们出现次数是多少?

方案一:将序列转换为字典{元素:频度},根据字典中的值排序。

方案二:使用标准库collections中的Counter对象。

统计文本文件词频:

五、字典中的公共键

场景:指定球员多场球赛进球数。
模拟:随机生成多个字典,找出公共建。

方案一、迭代每个字典的键

方案二、利用集合(set)的交集操作

Step1:使用字典的keys()方法,得到一个字典keys的集合.
Step2:使用map函数,得到每个字典keys的集合.
Step3:使用reduce函数,取所有字典的keys集合的交集.

五、让字典有序

Python3.5之前的字典不是有序的,存和取位置并不是对应好的。
案例:编写根据排名获取选手的函数接口

方案:使用标准库collections中的OrderedDict

六、历史记录存储

案例:现在我们制作了一个简单的猜数字的小游戏,如何添加历史记录功能,显示用户最近猜过的数字?

方案一:使用容量为n的队列存储历史记录

使用标准库collections中的deque,它是一个双端循环队列

方案二:使用pickle模块将历史记录存储到硬盘,以便下次启动使用

pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。