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 )的主要内容,如果未能解决你的问题,请参考以下文章

collections模块学习之namedtuple

Python之Collection模块-tuple及namedtuple

collections 模块(namedtuple, deque, Counter )

再谈collections模块defaultdict()和namedtuple()

collection模块

python 内置模块:collections