美文网首页
027 Python语法之collections模块

027 Python语法之collections模块

作者: Luo_Luo | 来源:发表于2017-09-12 11:19 被阅读0次

    namedtuple

    1. 自定义元组
    2. 可以通过属性访问(增加功能)
    3. 不可以动态增加新元素,保留了元组不可变特性

    代码

    from collections import namedtuple
    
    Mytuple = namedtuple("Mytuple",["x","y"])
    n = Mytuple(11,22)
    n.z = 123
    print(n.x)
    print(n.y)
    print(n.z)  # 错误,不可动态增加新元素
    
    
    n = Mytuple([1, 2, 3, 4], [123, 345])
    print(n.x)    # [1, 2, 3, 4]
    print(n.y)    # [123, 345]
    
    n = Mytuple(*[1, 2])    # 用列表赋值
    print(n.x)      # 1   
    print(n.y)      # 2
    

    deque

    1. 因为list是线性存储,数据量大的时候,插入和删除效率很低
    2. deque是为了高效实现插入和删除操作的双向列表

    代码

    from collections import deque
    
    q = deque(['a','b','c'])
    
    q.append('x')    # 默认添加到列表最后一项
    
    q.appendleft('y')  # 添加到列表第一项
    
    q.pop()  # 默认删除列表最后一个元素
    
    q.popleft()  # 删除列表的第一个元素
    

    defaultdict

    1. 使用字典时,如果引用的Key不存在,就会抛出 KeyError
    2. 如果希望key不存在时,返回一个默认值,就可以用 defaultdict
    3. 默认值是用一个函数返回的,这里用的匿名函数
    4. 除了增加了默认值,其他操作和普通字典一样

    代码

    from collections import defaultdict
    
    Mydict = defaultdict(lambda: 'N/A')
    
    print(Mydict["abc"])    # N/A
    

    OrderedDict

    1. OrderedDict 的有序性是按照插入的顺序,而不是KEY的顺序

    代码

    from collections import OrderedDict
    
    d = dict([('a', 1), ('b', 2), ('c', 3)])
    print(d)    # {'a': 1, 'c': 3, 'b': 2}
    
    od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    # OrderedDict的Key是有序的
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    

    Counter

    from collections import Counter
    
    c = Counter()
    for ch in 'programming':
        c[ch] = c[ch] + 1
    
    print(c)
    --------------------------------
    Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
    

    相关文章

      网友评论

          本文标题:027 Python语法之collections模块

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