python里的collections模块

collections模块里提供了一些特殊功能的容器:
namedtuple deque ChainMap Counter OrderedDict defaultdict

namedtuple
namedtuple,有点像一个C语言的结构体。

Point = namedtuple('Point', ['x', 'y'])
p = Point(100, 50)
p.x ==> 100
p[0] ==> 100 #注意因为是tuple子类,所以也支持tuple的操作

deque
是由解释器内部的_collections.deque实现的,所以它性能更佳,如果用作stack来测试比list要快10%~15%。因为是双向队列,所以它可以从两端append和pop,可以像list那样当stack用,也可以当queue用。当然没有deque,list也能非常容易的实现stack和queue的功能,deque的主要区别在:

C语言实现,性能更好
可以指定队列长度,达到容量后,之前append的元素自动覆盖
两端操作,即append与appendleft,pop和popleft

q = deque([], 10)
for i in range(20):q.append(i)
q ==> deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

特别注意:我们也可以使用list.pop(0)和list.insert(0, val)来实现popleft()和appendleft()一样的效果,但实际都有大量的数据拷贝操作,list.pop(index)只是删除index位置的元素,并返回它,所以在用作queue时,list和deque有巨大的性能差异!!!当然如果随机取,deque就慢得多,这非常容易理解,其实就是双链表和数组两种数据结构的差别。

q1 = []
t1 = time()
for i in range(1000):for i in range(10000):q1.append(i)for i in range(10000):q1.pop(0)
t2 = time()
print(t2-t1)  ==> 14.45sq2 = deque()
t1 = time()
for i in range(1000):for i in range(10000):q2.append(i)for i in range(10000):q2.popleft()
t2 = time()
print(t2-t1)  ==> 1.96s
ChainMap

将多个dict链在一块,如果添加、删除、修改时,就只针对链中的第一个dict,但如果查询时,就依次查询链中的每个dict,直到查询到所需要的key。

Counter
它跟itertools.groupby()不同,它只是统计各元素出现的次数,它继承至dict,但它的update方法并不是更新操作,而是将统计结果加和,还有一个相减的函数为subtract()。

```python
c = Counter('abcabcd')
c ==> Counter({'a': 2, 'b': 2, 'c': 2, 'd': 1})
c.update('abc')
c ==> Counter({'a': 3, 'b': 3, 'c': 3, 'd': 1})
c.update({'d': 99})
c ==> Counter({'a': 3, 'b': 3, 'c': 3, 'd': 100})
c.most_common(1) ==> [('d', 100)]

OrderedDict
这个就非常常见和常用了,就像php里的array,即是字典,同时也维护先后次序。注意它也是由内部_collections提供。

OrderedDict([('name', 'zhangsan'),('age', 24),('school', 'hust'),
])

defaultdict
理论上应该很常用,不过好像实际用的不多,主要是仅仅只省了个判断语句而已。让人意外的是内部实现居然也是由C模块_collections提供。

d = defaultdict(int)
d['abc'] ==> 0

对于一种特别常见的场景,就是每个元素都是一个list,比如group by操作,python文档里特别提到使用defaultdict会比使用dict.setdefault(k, []).append()更简便和快捷。

python里的collections模块相关推荐

  1. python内置collections模块的使用

    python内置collections模块的使用 文章目录: 一.collections模块说明 1.查看collections模块的定义路径 2.查看collections文档介绍信息 3.查看co ...

  2. 小福利,运用python里面的talib模块和cufflinks模块实现stock可视化分析

    小福利,运用python里面的talib模块和cufflinks模块实现stock可视化分析 import pandas as pd from sqlalchemy import create_eng ...

  3. Python标准库——collections模块的Counter类

    更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...

  4. Python标准库collections模块的Counter类

    collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排 ...

  5. python中counter_Python collections模块中counter()的详细说明,Pythoncollections,之,Counter,详解...

    collections模块 ==> Python标准库,数据结构常用的模块:collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提 ...

  6. Python自建collections模块

    本篇将学习python的另一个内建模块collections,更多内容请参考:Python学习指南 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtupl ...

  7. 二十九、深入Python中的collections模块

    @Author: Runsen collections模块是一个不用不知道,一用就上瘾的模块.这里主要介绍OrderedDict类.defaultdict类.Counter类.namedtuple类和 ...

  8. python高级语法-collections模块下几个新序列

    很多乃至绝大多数时候list,set,dict是不错的选择,但是有些特殊情形下我们发现内置的三种序列结构不能方便地满足我们的要求,这是collections模块下的几个新序列就有了用武之地. 这里只介 ...

  9. python里使用asyncore模块

    在计算机的世界里,想让一个CPU同时做多件事情,一般来说就两种办法,分时使用和并行使用CPU的资源.对于大量依赖IO事务的程序来说,使用一个线程做多件事情,比多线程做多件事情要来得简单,并且同样高效. ...

最新文章

  1. abaqus切削为什么没有切屑_基于ABAQUS的高速切削切屑形成过程的有限元模拟
  2. 深度学习100例-生成对抗网络(GAN)手写数字生成 | 第18天
  3. 洪小文博士写给你的新年书单
  4. PyQt5-菜单栏工具栏状态栏的使用(QMenuBar、QToolBar、QStatusBar)
  5. 脚本运行显示服务器超时,java执行shell脚本超时
  6. [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
  7. vue复选框组件自定义对勾_vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解...
  8. vue 指令 v-on 事件修饰符-鼠标事件-什么是事件冒泡
  9. 谁说 JavaScript 简单的?
  10. 三、系统的开关机和PDC简介
  11. selenium获取文本的几种方法小结(获取源码)
  12. Android 动态生成布局 (多层嵌套)
  13. [词根词缀]quarr/qui/quit/rad/radi等衍生单词
  14. 信息化与信息化系统__无线__网络工程标准
  15. win10更改user用户名(win10更改user用户名文件夹已在另一个文件中已打开)
  16. 免费期刊下载——超星发现
  17. 木头姐减持,机构却看好,京东大涨后的前景落脚何处?
  18. Nexus 3 Docker仓库(hosted、proxy、group)模式 讲解
  19. Win11插耳机没有声音-个人解决方法分享
  20. Python基础(三)

热门文章

  1. ----初读《构建之法》的疑虑
  2. (C/C++) string / *char / int 基本轉換
  3. 十步轻松搞定IIS+PHP环境搭建
  4. 查找算法系列之复杂算法:哈希查找
  5. 使用工具(Database Configuration Assistant)创建Oracle数据库
  6. SecureCRT 连数据库,启动tomcat操作命令
  7. javascript---DOM---事件
  8. vuecli3修改项目启动端口
  9. 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing
  10. 简单的跑马灯效果(轮播图)