基本介绍

我们都知道,python拥有一些内置的数据类型,比如说str,int,list,tuple,dict等,collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:

namedtuple(): 生成可以使用名字来访问元素内容的tuple子类

deque: 双端队列,可以快速的从另外一侧追加和推出对象

Counter: 计数器,主要用来计数

OrderedDict: 有序字典

defaultdict: 带有默认值的字典

collections()

namedtuple主要用来产生可以使用名称来访问元素的数据对象,通常用来增强代码的可读性,在访问一些tuple类型的数据时尤其好用.

"""比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。

使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构。"""

from collections importnamedtuple

birth= namedtuple("Struct_time",["year","month","day"])

b1= birth(2018,9,5)print(type(b1)) #

print(b1.year) #2018

print(b1.month) #9

print(b1.day) #5

print(b1) #Struct_time(year=2018, month=9, day=5)

#可命名元组非常类似一个只有属性没有方法的类#['year','month','day']是对象属性名#Struct_time是类 的名字#这个类最大的特点就是一旦实例化 不能修改属性的值

depue  双端队列

deque其实是 double-ended queue 的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象: .popleft(), .appendleft() 。

你可能会说,原生的list也可以从头部添加和取出对象啊?就像这样:

li = [2,3,4]

li.insert(0,666)print(li) #[666, 2, 3, 4]

print(li[0]) #666

但是值得注意的是,list对象的这两种用法的时间复杂度是 O(n) ,也就是说随着元素数量的增加耗时呈 线性上升。而使用deque对象则是 O(1) 的复杂度,所以当你的代码有这样的需求的时候, 一定要记得使用deque。

作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate 等。

"""下面这个是一个有趣的例子,主要使用了deque的rotate方法来实现了一个无限循环

的加载动画"""

importsysimporttimefrom collections importdeque

fancy_loading= deque(">-------------------------")while 1:print("\r%s" % "".join(fancy_loading)),

fancy_loading.rotate(1)

sys.stdout.flush()

time.sleep(0.08)

运行结果:#一个无尽循环的跑马灯

>>-------------------------

->>------------------------

-->>-----------------------

--->>----------------------

---->>---------------------

----->>--------------------

------>>-------------------

Counter

计数器是一个非常常用的功能需求,collections也贴心的为你提供了这个功能.

"""下面这个例子就是使用Counter模块统计一段句子里面所有字符出现次数"""

from collections importCounter

s= """A Counter is a dict subclass for counting hashable objcts. \

It is an unordered collection where elements are stored as dictionary

keys and their counts are stored as dictionary values.

Counts are allowed to be any integer value including zero or negative

counts.

The Counter class is similar to bags or multisets in other languages."""\

.lower()

c=Counter(s)#获取出现频率最高的5个字符

print(c.most_common(5)) #[(' ', 55), ('e', 31), ('s', 25), ('a', 24), ('t', 24)]

OrderedDict

在Python2中,dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了。

python2:

#-*- coding: utf-8 -*-

from collections importOrderedDict

items=(

('A', 1),

('B', 2),

('C', 3)

)

regular_dict=dict(items)

ordered_dict=OrderedDict(items)print 'Regular Dict:'

for k, v inregular_dict.items():printk, vprint 'Ordered Dict:'

for k, v inordered_dict.items():printk, v#运行结果:

Regular Dict:

A1C3B2Ordered Dict:

A1B2C3

defaultdict

我们都知道,在使用Python原生的数据结构dict的时候,如果用 d[key] 这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。

但是,如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。

from collections importdefaultdict

members=[#Age,name

["male","John"],

["male","Jack"],

["female","Lily"],

["male","Lily"],

["female","Lucy"]

]

result=defaultdict(list)for sex,name inmembers:

result[sex].append(name)print(result) #defaultdict(, {'male': ['John', 'Jack', 'Lily'], 'female': ['Lily', 'Lucy']})

上面只是非常简单的介绍了一下collections模块的主要内容,主要目的就是当你碰到适合使用 它们的场所时,能够记起并使用它们,起到事半功倍的效果。

python collections模块_python collections模块相关推荐

  1. python counter模块_python collections模块 计数器(counter)

    一.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 把我写入的元素出现的多少次都计算出来 import collectio ...

  2. 如何下载python模块_python安装模块与包

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序 ...

  3. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  4. python莫比乌斯环_python基础|模块

    1 模块简介 在python中常见的模块有三种,在python解释器中的内置模块,第三方模块和自定义模块.模块的有使用python编写的文件,有已被编译为共享库或DLL的C或C++扩展,也有使用C编写 ...

  5. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  6. python import变量_Python import模块调用

    开发过程中代码越写越多,在一个文件里代码会越来越长,不容易维护,为了容易维护代码,我们把很多函数分组,分别放在不同的文件里,在Python中,一个.py文件就是模块(Module) 工具/原料 Pyt ...

  7. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  8. python常用运维模块_python常用模块之一

    sys模块: sys模块是提供关于python本身的详细内在的信息的模块. sys.executable变量,它包含python解释器的路径 sys.platform变量,告诉我们现在处于什么操作系统 ...

  9. python 多层包多模块_python Modules模块操作

    今天学习python的Modules模块操作,并记录学习过程欢迎大家一起交流分享. 首先新建一个python文件命名为my_module.py的自定义moudle文件,在这个文件中进行模块代码编写: ...

  10. 如何显示python的内置模块_python之模块(内置模块)

    内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.sys 用于提供对Python解释器相关的操作: 1 sys.argv #命令行参数List,第一个元素是程 ...

最新文章

  1. lua菜鸟教程_Lua 环境安装
  2. 【CVPR2020】30篇最新论文抢先看!!!
  3. 用户层和内核层异常的处理流程
  4. [云炬创业学笔记]第一章创业是什么测试14
  5. python STL分解
  6. mysql 5.7.17 64位_Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  7. 计算机常用汉字输入法的使用,计算机的基本操作汉字输入法--.ppt
  8. mysql sql优化与调优机制详解_MySQL性能调优——锁定机制与锁优化分析详解
  9. c语言贪吃蛇毕业论文,毕业论文c语言贪吃蛇
  10. syncnavigator关于win10、win8系统无法注册机进行激活的问题
  11. 基站位置查询系统_Android获取手机基站位置并进行基站定位的原理
  12. Mysql 生成随机数字
  13. linux驱动开发总体结构,设备结构体分析
  14. adb检测不到模拟器的解决方法
  15. 微信小程序使用 checkbox 如何修改样式?
  16. 银河麒麟 安装PL2303GC USB转串口驱动
  17. ovo以及ovr的直观理解
  18. TFB cas:223569-31-1,聚合物光电材料
  19. 数学史资料:古巴比伦数学
  20. 调色板v3.0 for PPTs

热门文章

  1. 微软职位内部推荐-Senior Engineering Lead
  2. 一个简单的Java Web项目
  3. Json、String、JavaBean相互转换
  4. 分布式 集群 负载均衡含义
  5. yum mysql 设置密码_Linux下的 Mysql 8.0 yum 安装 并修改密码
  6. 多个so合并为一个so的思路
  7. WP:当文档中有阿拉伯文(维文)时,文字布局很麻烦
  8. FreeSwitch+Sipml5实现SIP协议WebRTC视频聊天(没呼叫成功)
  9. cl.exe is unable to create an executable file
  10. 解决办法:syslinux:Accessing physical drive