collections 模块(namedtuple, deque, Counter )
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了collections 模块(namedtuple, deque, Counter )相关的知识,希望对你有一定的参考价值。
基本介绍
我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
deque: 双端队列,可以快速的从另外一侧追加和推出对象
Counter: 计数器,主要用来计数
OrderedDict: 有序字典
defaultdict: 带有默认值的字典
namedtuple()
namedtuple主要用来产生可以使用名称来访问元素的数据对象,通常用来增强代码的可读性, 在访问一些tuple类型的数据时尤其好用。
# -*- coding: utf-8 -*- """ 比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。 使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构。 """ from collections import namedtuple websites = [ (\'Sohu\', \'http://www.google.com/\', u\'张朝阳\'), (\'Sina\', \'http://www.sina.com.cn/\', u\'王志东\'), (\'163\', \'http://www.163.com/\', u\'丁磊\') ] title = namedtuple(\'Website\', [\'name\', \'url\', \'founder\']) for website in websites: website = title._make(website) print website # Result: Website(name=\'Sohu\', url=\'http://www.google.com/\', founder=u\'\\u5f20\\u671d\\u9633\') Website(name=\'Sina\', url=\'http://www.sina.com.cn/\', founder=u\'\\u738b\\u5fd7\\u4e1c\') Website(name=\'163\', url=\'http://www.163.com/\', founder=u\'\\u4e01\\u78ca\')
deque
deque其实是 double-ended queue 的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象: .popleft(), .appendleft() 。
你可能会说,原生的list也可以从头部添加和取出对象啊?就像这样:
l.insert(0, v)
l.pop(0)
但是值得注意的是,list对象的这两种用法的时间复杂度是 O(n) ,也就是说随着元素数量的增加耗时呈 线性上升。而使用deque对象则是 O(1) 的复杂度,所以当你的代码有这样的需求的时候, 一定要记得使用deque。
作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate 等。
# -*- coding: utf-8 -*- """ 下面这个是一个有趣的例子,主要使用了deque的rotate方法来实现了一个无限循环 的加载动画 """ import sys import time from collections import deque fancy_loading = deque(\'>--------------------\') while True: print \'\\r%s\' % \'\'.join(fancy_loading), fancy_loading.rotate(1) sys.stdout.flush() time.sleep(0.08) # Result: # 一个无尽循环的跑马灯 ------------->-------
Counter
计数器是一个非常常用的功能需求,collections也贴心的为你提供了这个功能。
若要详细使用过程:http://www.pythoner.com/205.html
1.创建
2.返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,按照字母序排列。
以上是关于collections 模块(namedtuple, deque, Counter )的主要内容,如果未能解决你的问题,请参考以下文章
Python之Collection模块-tuple及namedtuple
collections 模块(namedtuple, deque, Counter )