Collections 是 Python 内建的一个集合模块,提供了许多额外的数据类型。

namedtuple

namedtuple 主要用来生成可以使用名称来访问元素的数据对象,通常用来增强代码的可读性。

namedtuple 是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,可以用属性而不是索引来写入或者访问 tuple 的某个元素。

>>> from collections import namedtuple
>>> Point = namedtuple('Point',['x','y'])
>>> p = Point(1,2)
>>> print(p.x,p.y)
1 2
>>> Web = namedtuple('web',['name','type','url'])
>>> p1 = Web('google','search','www.google.com')
>>> p2 = Web('sina','portal','www.sina.com.cn')
>>> print(p1)
Web(name='google',type='search',url='www.google.com')

deque

使用 list 存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为 list 是线性存储,数据量大的时候,插入和删除效率很低。

deque 是为了实现高效插入和删除操作的双向列表,适合用于队列和栈。

deque 在插入数据时速度比 list 快很多,当然这个是相对于存在大量数据的 list 而言的。

>>> from collections import deque
>>> import time
>>> q = deque(['a','b','c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> print(q)
deque(['y','a','b','c','x'])

对比一下 deque 和 list 的速度。对含有 1 亿个元素的 list 执行插入:

>>> q0 = [x*x for x in range(100000000)]
>>> a = time.time()
>>> q0.insert(0,888)
>>> b = time.time()
>>> print(b-a)
0.09701275825500488

对含有 1 亿个元素的 deque 执行插入:

>>> q1 = deque(q0)
>>> a = time.time()
>>> q1.appendleft(888)
>>> b = time.time()
>>> print(b-a)
0.0009984970092773438

defaultdict

在使用原生的 dict 的时候,如果用 d[key] 这样的方式访问,当指定的 key 不存在时,会抛出 KeyError 异常,也就是发生错误。

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

>>> from collections import defaultdict
>>> i = defaultdict(lambda:100)
>>> i['name']='David'
>>> print(i['name'])
David
>>> print(i['score'])
100

OrderedDict

原生的 dict 的 key 是无序的。而使用 OrderedDict,追加一对 key value。OrderedDict 的 key 会按照插入的顺序排列。

其他的方法基本一致。

Counter

Counter 提供了一个简单的计数器功能。

>>> from collections import Counter
>>> s = input('Please input:')
Please input:abcddeee
>>> s = s.lower()
>>> c = Counter(s)
>>> print(c.most_common(5)) # 获取出现频率最高的5个字符
[('e',3),('d',2),('b',1),('c',1),('a',1)]

最新文章

  1. java打包成jar,但不打包配置文件
  2. ionic + cordova 配置和开发过程中的一些问题
  3. loading.gif
  4. iOS 动画 旋转 移动简单代码
  5. 树莓派/RaspberryPi 内核编译
  6. 转--Windows下将jar包封装成服务程序
  7. 解决phpmyadmin配置文件的权限问题
  8. JSP标准标签库(JSTL)--核心标签库 c
  9. netty详解之io模型
  10. js 客户端打印html 并且去掉页眉、页脚
  11. Java相关资料分享(视频+电子书籍)
  12. DataTable的Merge\COPY\AcceptChange使用说明
  13. git bash的一些使用经验
  14. python 单例模式的四种实现方法及注意事项
  15. Django缓存1
  16. apollo broker 启动流程
  17. github如何添加新的分支
  18. C++模板学习笔记
  19. AdvStringGrid 列宽度、列移动、行高度、自动调节
  20. zend opcache的最佳设置

热门文章

  1. C# 类的继承和访问
  2. 加上这几个组件,flask摇身一变是django
  3. Office365 PowerShell打开邮箱审计功能
  4. 【codevs1690】开关灯 线段树
  5. HTML左边盒子固定,右边盒子自适应
  6. .NET-list扩展方法Distinct去重
  7. 京东POP店铺使用京东物流切仓操作方法
  8. Java架构师面试题——JVM性能调优
  9. 有时间看看这个方法 会不会 避免 xss
  10. java8 base64编码和解码