zoukankan      html  css  js  c++  java
  • Python 的 Collection 库

    Collections 是 Python 内建的一个集合模块,提供了许多额外的数据类型。

    namedtuple

    namedtuple 主要用来生成可以使用名称来访问元素的数据对象,通常用来增强代码的可读性。

    namedtuple 是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,可以用属性而不是索引来写入或者访问 tuple 的某个元素。

    >>> from collections import namedtuple
    >>> Point = namedtuple('Point',['x','y'])
    >>> p = Point(1,2)
    >>> print(p.x,p.y)
    1 2
    >>> Web = namedtuple('web',['name','type','url'])
    >>> p1 = Web('google','search','www.google.com')
    >>> p2 = Web('sina','portal','www.sina.com.cn')
    >>> print(p1)
    Web(name='google',type='search',url='www.google.com')
    

    deque

    使用 list 存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为 list 是线性存储,数据量大的时候,插入和删除效率很低。

    deque 是为了实现高效插入和删除操作的双向列表,适合用于队列和栈。

    deque 在插入数据时速度比 list 快很多,当然这个是相对于存在大量数据的 list 而言的。

    >>> from collections import deque
    >>> import time
    >>> q = deque(['a','b','c'])
    >>> q.append('x')
    >>> q.appendleft('y')
    >>> print(q)
    deque(['y','a','b','c','x'])
    

    对比一下 deque 和 list 的速度。对含有 1 亿个元素的 list 执行插入:

    >>> q0 = [x*x for x in range(100000000)]
    >>> a = time.time()
    >>> q0.insert(0,888)
    >>> b = time.time()
    >>> print(b-a)
    0.09701275825500488
    

    对含有 1 亿个元素的 deque 执行插入:

    >>> q1 = deque(q0)
    >>> a = time.time()
    >>> q1.appendleft(888)
    >>> b = time.time()
    >>> print(b-a)
    0.0009984970092773438
    

    defaultdict

    在使用原生的 dict 的时候,如果用 d[key] 这样的方式访问,当指定的 key 不存在时,会抛出 KeyError 异常,也就是发生错误。

    如果使用 defaultdict,只要你传入一个默认的方法,那么请求一个不存在的 key 时,便会调用这个方法,使用其结果来作为这个 key 的默认值。

    >>> from collections import defaultdict
    >>> i = defaultdict(lambda:100)
    >>> i['name']='David'
    >>> print(i['name'])
    David
    >>> print(i['score'])
    100
    

    OrderedDict

    原生的 dict 的 key 是无序的。而使用 OrderedDict,追加一对 key value。OrderedDict 的 key 会按照插入的顺序排列。

    其他的方法基本一致。

    Counter

    Counter 提供了一个简单的计数器功能。

    >>> from collections import Counter
    >>> s = input('Please input:')
    Please input:abcddeee
    >>> s = s.lower()
    >>> c = Counter(s)
    >>> print(c.most_common(5)) # 获取出现频率最高的5个字符
    [('e',3),('d',2),('b',1),('c',1),('a',1)]
    
  • 相关阅读:
    kubernetes 二进制安装v2
    Istio
    linux的history指令显示时间
    echarts折线图y轴刻度值按照某个值的倍数
    ubuntu下tesseract 4.0安装及参数使用
    chrome 浏览器下载大文件断掉的问题
    强化学习
    第十一篇 -- 2020总结以及2021期待
    字符串时间yyyyMMddHHmmss转成yyyy-MM-dd HH-mm-ss字符串格式
    windows安装mongodb,密码访问
  • 原文地址:https://www.cnblogs.com/IvyWong/p/11813700.html
Copyright © 2011-2022 走看看