python 内置模块之 collections 的使用

python 有很多的内置模块,collections是比较常用的一个,collections实现了专门的容器数据类型,为python的内置容器提供了替代方案。(这句话是我根据官方文档理解翻译的。原文:This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.)我理解为在python常用的数据类型基础上,提供了更高级的数据类型用法
collections中常用的类型有以下几种(除了我介绍的还有其他的用法,有兴趣的可以去官方文档看一下,地址:https://docs.python.org/3/library/collections.html):
(1) namedtuple(): 可以创建一个类对象
(2) deque: 双端队列,可以在两端操作
(3) counter: dict 的子类,具有统计功能
(4) OrderedDict: 有序字典
(5) defaultdict: dict的扩展子类,拥有dict的所有功能,还能在调用不存在的键时创建一个默认值
其中最常用的是namedtuple() 和 defaultdict

一、namedtuple
1. namedtuple 继承自tuple ,可以用来创建一个类对象
用法如下图:
python 内置模块之 collections 的使用_第1张图片
2. 为什么会用到这种方法来定义类,而不用常用的class 方法:
(1) 代码简洁
(2) 节省空间,少了用class 定义类的很多变量  (3) python解释器在解释class 类的时候会创建很多变量,使用namedtuple会省很多的中间变量,节省内存,提高效率,尤其是在数据分析的时候用处很大
3. namedtuple继承了tuple,所以也有拆包的功能,在创建类传参时可以使用,用法如下:
在这里插入图片描述
在这里插入图片描述
4. 除了从tuple继承的方法外,namedtuple还提供了3个方法和1个属性,为了避免冲突,使用下划线开头。
(1) _make(iterable): 创建新的实例方法,参数必须是可迭代的
python 内置模块之 collections 的使用_第2张图片
这里的user_tuple直接使用前面的
(2) _asdict(): 返回一个OrderdDict
OrderdDict会在后面提到
(3) _replace(**kwargs): 会返回一个新的namedtuple 实例,并将指定字段的值替换,也就是修改字段值,但是不会修改原实例,会返回一个新实例。
python 内置模块之 collections 的使用_第3张图片
(4) _fields: 返回所有字段,返回结果是tuple
python 内置模块之 collections 的使用_第4张图片
二、deque 双端队列
1. 用法跟list 类似,比list 多了左侧操作的方法
python 内置模块之 collections 的使用_第5张图片
2. 相关操作
(1) appendleft()
python 内置模块之 collections 的使用_第6张图片
(2) clear()
(3) conut()
(4) copy()
(5) extend()
extendleft()
python 内置模块之 collections 的使用_第7张图片
(6) index()
(7) pop()
popleft()
(8) remove()
(9) reverse()
python 内置模块之 collections 的使用_第8张图片
要注意,reversed是有返回值的,并不改变原值
(10) rotate():将元素向左或右移动,参数为1右移,-1 左移,默认为1
python 内置模块之 collections 的使用_第9张图片
(11) maxlen: deque的最大尺寸,如果返回None,表示没有限制
这些用法跟list是一样的,我就不演示了。
三、defaultdict
没用defaultdict之前,如果我们要统计一个列表中每个元素出现的次数,会怎么做呢?
一般我们都会想到下面这种方法:
python 内置模块之 collections 的使用_第10张图片
如果对字典的用法了解的更深入的话,会想到下面这种方法:
python 内置模块之 collections 的使用_第11张图片
这种方法相比第一种而言,不仅代码行数少,而且速度更快,更高效
在我们了解了defaultdict 之后,有一种更简单高效的用法:
python 内置模块之 collections 的使用_第12张图片
python 内置模块之 collections 的使用_第13张图片
这里参数还可以参数函数,用法如下:
python 内置模块之 collections 的使用_第14张图片
四、OrderedDict
python2 下,dict 无序的
OrderdDcit 有序
python3 下,都有序
这里的有序指的是添加顺序
用法有以下几种:
(1) 删除,popitem() 移除并返回一个键值对(key, value),参数为last, 不传参时删除最后一个,传参 last = True删除第一个, last = False,删除最后一个,默认为False
python 内置模块之 collections 的使用_第15张图片
(2) move_to_end(key, last=True)
last 为 True 时,元素移到末尾,为 False 时,移到首位,默认为True
当 key 不存在时,会报 KeyError错误
python 内置模块之 collections 的使用_第16张图片
五、Counter
Counter 是dict的子类,用于计数可哈希对象
可以理解为就是一个计数功能。
用法如下:
(1)
python 内置模块之 collections 的使用_第17张图片
(2) 如果元素不存在,不会报KeyError的错误,会返回一个0值
在这里插入图片描述
(3) 如果你想把Counter中的对象移除,要用del 实现
如下,但是b中元素并不会受到影响
python 内置模块之 collections 的使用_第18张图片
(4) elements
在元素上返回一个迭代器,重复次数跟计数相同,如果计数小于等于0会忽略,按任意顺序返回
python 内置模块之 collections 的使用_第19张图片
(5) most_common([n])
返回数量最多的前n个元素的列表,如果没有传入n,会默认返回所有元素
python 内置模块之 collections 的使用_第20张图片
(6) substract
从一个Counter中减去另一个Counter
python 内置模块之 collections 的使用_第21张图片
Counter和defaultdict都有统计计数的功能,但时两者有什么区别,我还没有了解透彻,有明白的大佬,欢迎补充。
以上笔记是我根据官方文档和慕课网的一个视频教程整理出来的,如果有兴趣的也可以自己去慕课网上看一下。

因为只是学习了一下collections模块,并没有在实际工作中使用,如果有错误的地方,还请指正,共同进步,谢谢!

你可能感兴趣的:(python基础)