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没有被指定,则返回所有元素。当多个元素计数值相同时,按照字母序排列。

时间: 2024-10-23 21:55:48

collections 模块(namedtuple, deque, Counter )的相关文章

Python中collections模块中的Counter()类

最近在刷leetcode,发现很多题目的思路都很相似.其中,collections模块中的Counter()多次在习题中碰到,很有必要对该知识点总结一下,加深理解. 1.collections模块 collections模块自Python 2.4 版本之后,引入除了dict.list.set.tuple以外的一些特俗容器,分别是: namedtuple():factory function for creating tuple subclasses with named fields(versi

python collections模块 计数器(counter)

一.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 把我写入的元素出现的多少次都计算出来 import collections # 创建一个Counter对象 obj = collections.Counter('ddccbbqqaaa') print(obj) ''' 把我写入的元素出现的多少次都计算出来 Counter({'a': 3, 'd': 2, 'c': 2, 'b': 2, 'q': 2}) ''' ob

Python--正则表达式,re模块,collections模块,random模块,时间模块

正则表达式 元字符量词(?) 元字符 : . \w \d \s \W \D \S \n \t \b () | [] [^] ^ $ 量词 : * + ? {n} ,{n,} ,{n,m} re模块怎么调用re模块 查找 : findall search match finditer 分割和替换 :split sub subn 编译 :compile 节省时间re模块到底用在了几个地方? 量词 :表示匹配0次或1次 在量词之后 :是惰性匹配的标志 分组命名 :(?P<NAME>正则表达式) 引用

Python 常用模块(1) -- collections模块,time模块,random模块,os模块,sys模块

主要内容: 一. 模块的简单认识 二. collections模块 三. time时间模块 四. random模块 五. os模块 六. sys模块 一. 模块的简单认识 模块: 模块就是把装有特定功能的代码进行归类的结果引入模块的方式: (1) import 模块 (2) from 位置 import 模块 二. collections模块 collections模块主要封装了一些关于集合类的相关操作. 如我们学过的iterable,iterator等等.除此以外, collections还提

Python中Collections模块的Counter容器类使用教程

1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排序字典,是字典的子类.引入自2.7.namedtuple()函数:命名元组,是一个工厂函数.引入自2.6.Counter类:为hashable对象计数,是字典的子类.引入自2.7.deque:双向队列.引入自2.4.defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键.引入自2.

python collections模块中namedtuple()

最近看Ansible API中引用了collections的namedtuple() 网上搜了一番后,发现是一个集合模块,提供了多种集合类. In [1]: from collections import                Callable        Hashable        Mapping         namedtuple      ValuesView      _field_template _itemgetter                    Conta

collections模块—— Counter

collections模块-- Counter Counter目的是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的形式存储,其中元素作为key,其计数作为value. 计数值可以是任意的lnterger(包括0和负数). Counter类和其他的bags或multisets很相似. 创建 下面的代码说明了Counter类创建的四种方法: Counter类的创建: from collections import Counter c = Counter()#创建一个空的Counter c =

Python的collections模块中namedtuple结构使用示例

namedtuple顾名思义,就是名字+元组的数据结构,下面就来看一下Python的collections模块中namedtuple结构使用示例 namedtuple 就是命名的 tuple,比较像 C 语言中 struct.一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 index 访问,没有明确的称呼,而 namedtuple 就是事先把这些 item 命名,以后可以方便访问. ? 1 2 3 4 5 6 7 8 9 10 11

collections模块学习之namedtuple

namedtuple collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None) typename 创建的namedtuple返回的对象类型 field_names 创建的namedtuple每个元素对应的name,不然为啥叫namedtuple呢.这个参数传递的可以是一个列表,一个用空格或者","间隔开的字符串. rename 如果为True,则对field_na