在内置函数(dict、list、set、tuple)的基础上,collections模块还提供了几个其他的数据类型:Counter、deque、defaultdict、namedtuple和OrdereDict等

1.namedtuple

作用:用于生成一个可以使用名字访问元素内容的tuple

如果要表示一个点,我们可以这样表示,但是在使用时我们很难看出这个tuple是用来表示一个坐标

p = (1,2)

因此我们调用namedtuple来解决这个问题

表示二维中的一个点:

import collections
Point = collections.namedtuple('Point',['x','y'])
print(Point)        #<class '__main__.Point'>
p = Point(1,2)
print(p.x)          #1
print(p.y)          #2
print(p)            #Point(x=1, y=2)

表示三维中的一个点:

import collections
Point = collections.namedtuple('Point',['x','y','z'])
print(Point)        #<class '__main__.Point'>
p = Point(1,2,3)
print(p.x)          #1
print(p.y)          #2
print(p.z)          #3
print(p)            #Point(x=1, y=2, z=3)

表示一个圆的属性:

import collections
Circle = collections.namedtuple('Circle',['r','d','s','l'])

表示一张扑克牌:

import collections
Card = collections.namedtuple('card',['c_class','c_num'])
c = Card('方块','4')
print(c.c_class)            #方块
print(c.c_num)              #4
print(c)                    #card(c_class='方块', c_num='4')

2.deque()

这里先说一个队列quque()

队列的特性:先进先出(FIFO)

import queue
i = 1
q = queue.Queue()
q.put(5)
q.put(6)
q.put(-5)
print(q)          #<queue.Queue object at 0x0000000002082EB8>
print(q.qsize())  #3    整个队列长度为3
print(q.get())    #5
print(q.get())    #6
print(q.get())    #-5
print(q.get())    #阻塞 因为整个队列只有3个元素,当3个元素全部取出后就再也取不出新的元素,程序就会一直等待用户给它一个值

deque()双端队列,两边的头都可以取和存

from collections import deque
dq = deque([5,6])
dq.append('a')              #从后面放数据
dq.appendleft('b')          #从前面放数据
dq.insert(1,'c')            #在1这个索引下加入'c',原位置下的元素往后移一位
print(dq)                   #deque(['b', 'c', 5, 6, 'a'])
print(dq.pop())             #a      向后弹出一个元素'a'
print(dq.popleft())         #b      向前弹出一个元素'b'

运用队列的好处在于能够高效插入和删除操作的双向列表,适合用于队列和栈

而我们使用list,虽然访问元素速度很快但是我们要插入或删除一个元素就会慢很多,数据量大的时候后,插入和删除效率也会很低

3.OrderedDict()

当我们在操作字典时,我们无法确定自己的key的顺序,如果我们要保持这一顺序我们就可以使用有序字典OrderedDict()这一个方法

from collections import OrderedDict
od = OrderedDict([('k1',1),('k2',2),('k3',3)])
print(od)       #OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
print(od['k1']) #1
for k in od:print(k)    #k1#k2#k3

ps:存储一个列表或字典时,字典往往会比列表更占内存

4.defaultdict()

给字典通过一个没有参数的匿名函数设置一个默认值

from collections import defaultdict
d = defaultdict(lambda : 5)
print(d['k'])   #5
print(d['v'])   #5
print(d['b'])   #5
print(d)        #defaultdict(<function <lambda> at 0x0000000002158730>, {'k': 5, 'v': 5, 'b': 5})

5.Counter()

功能主要是跟踪值出现的次数,它是一个无序的容器,以键值对的形式储存,其中元素为key,其计数作为value,计数值可以是任意的int(包括负数和0),Counter类和其他语言的bags或multisets很相似

from collections import Counter
ret = Counter('avbb223')
print(ret)      #Counter({'b': 2, '2': 2, 'a': 1, 'v': 1, '3': 1})

转载于:https://www.cnblogs.com/Fantac/p/11421703.html

Python学习日记(十五) collections模块相关推荐

  1. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

  2. Python学习日记(十六) time模块和random模块

    time模块 python表示时间的三种方式:时间戳.元祖(struct_time).格式化时间字符串 三种格式之间的转换: 1.时间戳 就是从1970年1月1日0点0分0秒开始按秒计算的偏移量,时间 ...

  3. python学习[第十五篇] 文件系统

    python学习[第十五篇] 文件系统 对文件系统访问大多数都通过os模块实现. os 模块文件/目录访问函数 文件处理 mkfifo() 创建命名通道只用于linux remove(path)/un ...

  4. Python学习日记(十四) 正则表达式和re模块

    正则表达式: 它是字符串的一种匹配模式,用来处理字符串,可以极大地减轻处理一些复杂字符串的代码量 字符组:它是在同一位置可能出现的各种字符组成了一个字符组,用[]表示,但是它的结果只能是一个数字或者一 ...

  5. Python学习日记(十九) 模块导入

    模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc():print('这个函数被调用!') 然后我们在comma ...

  6. python学习第十三节:模块

    1:什么是模块:模块是最高级比的程序组织单元,之前学习的类,可以封装属性和方法,函数,可以封装方法,而模块,可以封装一切 2:定义变量要用赋值语句,封装函数要用def语句,封装类需要用class语句, ...

  7. Python学习日记(十) 生成器和迭代器

    使用dir()我们可以知道这个数据类型的内置函数有什么方法: print(dir(int)) print(dir(bool)) print(dir([])) print(dir({})) print( ...

  8. python学习第十五天

    1.面向对象和面向过程 面向过程: 以我为中心. 按照事物的发展"流程". 面向对象: 以对象为中心. 万事万物皆为对象(object) 2.如何编写面向对象程序(重点) 先创建类 ...

  9. python学习笔记(十五) -- 枚举

    枚举 枚举的作用就是定义一组 数据形式为 dict 但却又不可变的常量 比如我们定义一个类,或者定义一个dict ,类中的成员变量可以被更改,而且类又可以被实例化,dict 里面的值也可以被更改. 如 ...

最新文章

  1. V-rep学习笔记:机器人路径规划1
  2. [转]Silverlight在调用wcf时传输数据过大返回Not Found的解决办法
  3. oracle 最低要求吗,神谕Oracle配置要求高吗?最低及推荐配置一览
  4. mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集
  5. Java 进阶——单例模式
  6. Diango博客--22.Django Haystack 全文检索与关键词高亮
  7. python 解决bytes和str之间 出现 TypeError的问题
  8. centos7下安装nginx及常用命令
  9. 我的596升级到Windows Mobile 6了
  10. Spring MVC BindingResult异常
  11. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  12. hdoj2084:数塔(dp基础题----递归写法/状态转移方程法)
  13. 录音文件下载_录音啦(文字语音转换)软件安装教程
  14. 关于RGB888和RGB565互转代码实现方案推荐
  15. ecc升级s4后金额字段负号提前,导出excel负号却在后面
  16. cad字体安装_如何使用CAD插件与字体?1分钟掌握安装教程,让你快人一步!
  17. 三星Galaxy S20:将侧面按钮更改为电源按钮
  18. 登录服务器虚拟控制台,服务器控制台登录类
  19. mac os之监听触摸板(捏合、旋转、三指)
  20. 细数二三四五“爆雷”简史:布局金融7年一场空,陈于冰贯穿始终

热门文章

  1. 微信小程序人脸识别的实现
  2. Android+ESP8266+路由器实现远程控制(基于花生壳域名方式访问)
  3. .Net Core 日志组件log4net的Log4NetHelper类
  4. 推特引流:社交引流的技巧与方法
  5. IPSec VPN的原理与配置
  6. 老外翻译的中国电影名称(暴笑)
  7. 招聘|大型企业紧急招聘 寻找优秀的你
  8. 只让输入数字的输入框
  9. 全覆盖路径规划思想(2)
  10. 利用Python给女朋友跨年放个烟花