美文网首页
1-2 collections中deque,defaultdic

1-2 collections中deque,defaultdic

作者: 小龙虾0o0 | 来源:发表于2018-12-29 00:16 被阅读0次
    deque

    使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

    -------摘自廖大的官方网站


    deque支持各种双向插入操作,如popleft,appendleft
    代码如下:

    import collections
    l = collections.deque(maxlen= 5)
    l.extend([1, 2, 3, 4, 5, 6])
    print(l)
    >>> deque([2, 3, 4, 5, 6], maxlen=5)
    
    l.appendleft(1)
    print(l)
    >>> deque([1, 2, 3, 4, 5], maxlen=5)
    
    l.popleft()
    print(l)
    >>> deque([2, 3, 4, 5], maxlen=5)
    

    在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元素的时间复杂度为 O(N)

    collections.deque中很重要的就是maxlen的应用,它限制了最大长度,如果超出会顶掉另一侧的元素。依靠它我们可以写出更为简洁的代码


    defaultdict

    collections.defaultdict可以用来实现字典的一键对应多值,多个值需要存储再另一个容器内
    代码如下:

    import collections
    d = collections.defaultdict(list) #这里可以写 list 或者 set,具体视需求而定
    d[1].append(1)
    d[1].append(2)
    d['1'].append(1)
    print(d)
    
    >>> defaultdict(<type 'list'>, {'1': [1], 1: [1, 2]})
    

    多值容器的选取,要考虑容器的特性,list ——有序,set——去重


    OrderedDict

    Python中字典是无序的,但是有时候需要使用有序的字典,这时候要用到OrderedDict,它构建的字典里有依据插入顺序排序的双向链表,但是它占用内存大小是普通字典的两倍

    相关文章

      网友评论

          本文标题:1-2 collections中deque,defaultdic

          本文链接:https://www.haomeiwen.com/subject/chbylqtx.html