当前位置:网站首页>第贰章模块大全之《 collections模块》
第贰章模块大全之《 collections模块》
2022-08-10 14:59:00 【华为云】
️目录
一、collections模块前言
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
- 1.namedtuple: 生成可以使用名字来访问元素内容的tuple
- 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
- 3.Counter: 计数器,主要用来计数
- 4.OrderedDict: 有序字典
- 5.defaultdict: 带有默认值的字典
- 6.queue:队列(先进来的先出去)
以下就会详细讲解这几个数据类型的基础知识和使用方法
二、namedtuple的使用方法
我们知道
tuple
可以表示不变的列表,例如,一个点的二维坐标就可以用如下方式表示:但是我们第一眼看到a = (2,3)会想到它是表示坐标吗?我想大多数人会看成是将一个含有2和3元素的元组赋给a这个变量吧!如何让我们第一眼看到就会知道它表示坐标呢?
这时,
namedtuple
就派上了用场:创建扑克牌
三、queue(队列)方法
Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。
- Queue.put()向队列中放值
- Queue.get()从队列中取值
- Queue.qsize() 返回队列的大小
- Queue.empty() 如果队列为空,返回True,反之False
- Queue.full()如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应
- Queue.get([block[, timeout]])获取队列,timeout等待时间
- Queue.get_nowait() 相当于Queue.get(False),非阻塞方法
- Queue.put(item) 写入队列,timeout等待时间
- Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
- Queue.join() 实际上意味着等到队列为空,再执行别的操作
栗子:
如果还向q执行q.get()(此时q的值已被取完)向q取值的话程序不会报错但是会发生阻塞
如果不想出现阻塞,可以在取值之前用Queue.qsize() 看看队列的大小
四、deque(双端队列)方法
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
操作:
- Deque() 创建一个空的双端队列
- append()向双端队列后面放数据
- appendleft()向双端队列前面放数据
- pop()向双端队列后面取数据
- popleft()向双端队列前面取数据
- add_front(item) 从队头加入一个item元素
- add_rear(item)从队尾加入一个item元素
- remove_front() 从队头删除一个item元素
- remove_rear()从队尾删除一个item元素
- is_empty() 判断双端队列是否为空
- size() 返回队列的大小
栗子:
插入数据的流程:
五、defaultdict 方法
defaultdict 方法详述
有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典中的k1中,将小于 66 的值保存至k2的值中。
即: {
'k1'
: 大于
66
,
'k2'
: 小于
66
}按以前的做法如果要
保存至字典的字典中没有k1或k2,就会抛出KeyError
。如果希望key不存在时,返回一个默认值,就可以用defaultdict
:如何使用defaultdict呢?
defaultdict接受一个工厂函数作为参数,如下来构造:
这个factory_function必须是可以调用的可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,简单来说defaultdict在我们操作字典中没有的键时,会自动创建而不会报错,且你可以指定自动创建的键对应的值的默认类型,通过改变factory_function
知识点拓展之定义字典的冷门方法
按平常我们会这样定义一个字典d:
但其实上面这个字典也可以这样定义:
但这两种方法定义的字典的键都是无序的,如果想要得到一个键为有序的字典还是得用defaultdict 方法
六、Counter方法
方法用到的地方不多,主要是记录字符串中相同值出现的次数
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。
边栏推荐
- 丁香园
- const-modified pointer variable (detailed)
- 奢侈品鉴定机构小程序开发制作功能介绍
- 【MindSpore易点通机器人-02】设计与技术选型
- Websocket realizes real-time change of chart content
- BFT机器人带你走进智慧生活 ——探索遨博机器人i系列的多种应用
- The a-modal in the antd component is set to a fixed height, and the content is scrolled and displayed
- MySQL Principle and Optimization: Update Optimization
- “蔚来杯“2022牛客暑期多校训练营7
- 电脑重装系统提示activex部件不能创建对象如何解决
猜你喜欢
线上线下课程教学培训小程序开发制作功能介绍
It is reported that the original Meitu executive joined Weilai mobile phone, the top product may exceed 7,000 yuan
fastposter v2.9.1 程序员必备海报生成器
阿里五位MySQL封神大佬耗17个月总结出53章性能优化法则
数据在内存中的存储
Appium for APP automation testing
E. Cross Swapping(并查集变形/好题)
fatal error C1083 Unable to open include file 'io.h' No such file
Zijin Example
scala集合
随机推荐
领域驱动模型设计与微服务架构落地-从项目去剖析领域驱动
Based on Azuki Series: NFT Valuation Analysis Framework "DRIC"
富爸爸穷爸爸之读书笔记
2022-08-10 Daily: Swin Transformer author Cao Yue joins Zhiyuan to carry out research on basic vision models
Custom picker scroll selector style
Understanding_Data_Types_in_Go
王学岗—————————哔哩哔哩直播-手写哔哩哔哩硬编码录屏推流(硬编)(26节课)
网络初识(二)
Parallels 将扩展桌面平台产品,以进一步改善在 Mac 上运行 Windows 的用户体验和工作效率
基于inotify实现落盘文件的跨进程实时读写交互
等保2.0一个中心三重防护指的是什么?如何理解?
Azure IoT Partner Technology Empowerment Workshop: IoT Dev Hack
systemui状态栏添加新图标
丁香园
Digital Collection Platform System Development Practice
scala basics
关于已拦截跨源请求CORS 头缺少 ‘Access-Control-Allow-Origin‘问题解决
关于async\await 的理解和思考
Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
容器化 | 在 S3 实现定时备份