zoukankan      html  css  js  c++  java
  • 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'u5f20u671du9633')
    Website(name='Sina', url='http://www.sina.com.cn/', founder=u'u738bu5fd7u4e1c')
    Website(name='163', url='http://www.163.com/', founder=u'u4e01u78ca')

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

     

  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    Windows邮件添加QQ邮箱
  • 原文地址:https://www.cnblogs.com/renfanzi/p/6217514.html
Copyright © 2011-2022 走看看