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 ,可以用来创建一个类对象
用法如下图:
在这里插入图片描述
2. 为什么会用到这种方法来定义类,而不用常用的class 方法:
(1) 代码简洁
(2) 节省空间,少了用class 定义类的很多变量  (3) python解释器在解释class 类的时候会创建很多变量,使用namedtuple会省很多的中间变量,节省内存,提高效率,尤其是在数据分析的时候用处很大
3. namedtuple继承了tuple,所以也有拆包的功能,在创建类传参时可以使用,用法如下:
在这里插入图片描述
在这里插入图片描述
4. 除了从tuple继承的方法外,namedtuple还提供了3个方法和1个属性,为了避免冲突,使用下划线开头。
(1) _make(iterable): 创建新的实例方法,参数必须是可迭代的

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

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值