首页 > 代码库 > collections 模块(namedtuple, deque, Counter )
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 namedtuplewebsites = [ (‘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 sysimport timefrom collections import dequefancy_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 )
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。