• Python常用模块 -- collections模块常用用法


    """
    collections模块
    """
    
    from collections import namedtuple, deque, OrderedDict, defaultdict, Counter
    
    """
    namedtuple:可以使用名字来访问元素内容的tuple
    """
    # 1,坐标
    Point = namedtuple('point', ['x', 'y'])
    p = Point(1, 2)
    print(p)
    print(p.x)
    print(p.y)
    # 2,用坐标和半径表示一个圆
    Circle = namedtuple('circle', ['x', 'y', 'r'])
    c = Circle(3, 4, 2)
    print(c)
    
    """
    deque:双端队列,可以快速的从另外一侧追加和推出对象
    
    使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
    deque是为了高效实现【插入和删除】操作的双向列表,适合用于队列和栈
    """
    q = deque(['a', 'b', 'c'])
    q.append('d')
    q.appendleft('xx')
    print(q)
    
    """
    OrderedDict:有序字典
    
    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
    如果要保持Key的顺序,可以用OrderedDict
    """
    item = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    d = dict(item)
    print(d)  # dict的Key是无序的
    od = OrderedDict(item)
    print(d)  # OrderedDict的Key是有序的
    
    """
    defaultdict:带有默认值的字典
    语法:defaultdict(callable)    # 参数必须是可调用的
    """
    # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
    values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    # 方式1:原生字典处理方式
    dict1 = {}
    for v in values:
        print('xxx', v)
        if v > 66:
            if 'key1' not in dict1:
                dict1['key1'] = []
            dict1['key1'].append(v)
        else:
            if 'key2' not in dict1:
                dict1['key2'] = []
            dict1['key2'].append(v)
    
    print('dict1', dict1)
    
    # 方式2:default处理方式
    dict2 = defaultdict(list)
    for v in values:
        if v > 66:
            dict2['key1'].append(v)
        else:
            dict2['key2'].append(v)
    
    print('dict2', dict2)
    
    # 例子2:使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用 defaultdict
    dict3 = defaultdict(lambda: 'N/A')
    dict3['key1'] = 10
    print(dict3['key1'], dict3['key2'])
    
    """
    Counter:计数器,主要用来计数
    Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数值作为value。
    计数值可以是任意的Interger(包括0和负数)【ps:这里可以是0和负数有点不能理解】。Counter类和其他语言的bags或multisets很相似。
    """
    c = Counter('abcdeabcdabcaba')
    print(c)
    
  • 相关阅读:
    SSIS Error:Package Validation Error. SSIS Error Code DTS_E_OLEDBERROR. .Error code: 0x80040E37. An OLE DB record is available. Hresult: 0x80040E37
    MDS
    oracle11g rac静默安装+racADG部署搭建
    oracle 19c 单机ADG部署
    对索引组织表以及簇表的一些理解
    对表的连接的总结
    全局临时表
    对分区表的一些总结
    对临时表空间的一些常用查询
    linux 常用命令总结
  • 原文地址:https://www.cnblogs.com/sunch/p/12390435.html
Copyright © 2020-2023  润新知