• collection模块


    一、计数器

    Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能加自己的功能。

    1 import collections
    2 obj = collections.Counter('aadsdfasddfg')  #计数
    3 print(obj)
    4 Counter({'d': 4, 'a': 3, 'f': 2, 's': 2, 'g': 1})  #输出结果

    方法

    1.most_common  #取前几位

    obj = collections.Counter('aadsdfasddfg') 
    ret = obj.most_common(4)  #拿前四位
    print(ret)
    [('d', 4), ('a', 3), ('s', 2), ('f', 2)]

    2.sorted  #输出每个元素

    a = sorted(obj)
    print(a)
    ['a', 'd', 'f', 'g', 's']  #输出结果

    3.join

    a = ''.join(sorted(obj.elements()))
    print(a)
    aaaddddffgss

    4.sum  #统计总数

    a = sum(obj.values())
    print(a)
    12  #输出结果

    5.

     1 a = obj['a']  #统计a的个数
     2 print(a)
     3 3  #输出结果
     4 
     5 del obj['d']  #删除‘d’
     6 b = obj['d']
     7 print(b)
     8 0  #输出结果
     9 
    10 d = collections.Counter('asdfgjjk')  #新添加一个计数器
    11 obj.update(d)  #新计数器更新到obj
    12 c = obj['a']
    13 print(c)
    14 4  #输出结果
    15 
    16 obj.clear()  #清空
    17 print(obj)
    18 
    19 e = collections.Counter('aaabbc')
    20 e['b'] -= 2  #其中的‘b'减去2
    21 f = e.most_common()
    22 print(f)

    6.update  #更新计数器

    obj = collections.Counter(['11','22','33'])
    obj.update(['44','11','11'])
    print(obj)
    Counter({'11': 3, '22': 1, '44': 1, '33': 1})

    7.subtract  #相减

    obj.subtract('hak')  
    a = obj['a']
    print(a)
    2

    二、有序字典(orderedDict)

    orderdDict是对字典类型的补充,他记住了字典元素添加的顺序

     1 #有序字典
     2 
     3 import collections
     4 
     5 dic = collections.OrderedDict()
     6 #dic = dict()
     7 dic['k1'] = 'v1'
     8 dic['k2'] = 'v2'
     9 dic['k3'] = 'v3'
    10 dic['k4'] = None
    11 # dic.setdefault('k4')  #效果同上
    12 print(dic)
    13 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None)])
    14 
    15 dic.move_to_end('k1')  #把k1移到最后
    16 print(dic)
    17 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v1')])
    18 
    19 dic.popitem()  #把第一个删除
    20 print(dic)
    21 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None)])
    22 
    23 dic.update({'k1':'v111','k10':'v10'})  #更新
    24 print(dic)
    25 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v111'), ('k10', 'v10')])

     三、默认字典(defaultdict) 

    import collections
    from collections import defaultdict
    dic = {'k1':[]}  #普通方法
    dic['k1'].append('yoyo')
    dic = collections.defaultdict(list)  #使用默认字典
    dic['k1'].append('yoyo')
    print(dic)

    应用:

    有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

    即: {'k1': 大于66 'k2': 小于66}
    使用默认字典:
    values = [11,22,33,44,55,66,77,88,99,90]
    my_dict = defaultdict(list)
    
    for value in values:
        if value>66:
            my_dict['k1'].append(value)
        else:
            my_dict['k2'].append(value)
    
    print(my_dict)

    普通方法:

    values = [11,22,33,44,55,66,77,88,99]
    new_dic = {}
    list1 = []
    list2 = []
    
    for i in values:
        if i >66:
            list1.append(i)
        else:
            list2.append(i)
    new_dic['k1'] = list1
    new_dic['k2'] = list2
    print(new_dic)
    for i in values:
        if i>66:
            if 'k1' in new_dic.keys():
                new_dic['k1'].append(i)
            else:
                new_dic['k1'] = [i,]
        else:
            if 'k2' in new_dic.keys():
                new_dic['k2'].append(i)
            else:
                new_dic['k2'] = [i,]
    print(new_dic)

    四、可命名元组

    根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型

    import collections
    #创建类,defaultdict
    MytupleClass = collections.namedtuple('MytupleClass',['x','y','z'])
    print(help(MytupleClass))
    obj = MytupleClass(11,22,33)
    print(obj.x)
    print(obj.y)
    print(obj.z)
    11   #打印结果
    22
    33

    五、双向队列

     1 #双向队列
     2 d = collections.deque()
     3 d.append('1')
     4 d.appendleft('10')
     5 d.appendleft('1')
     6 print(d)
     7 #deque(['1', '10', '1'])
     8 r = d.count('1')
     9 print(r)
    10 #2
    11 d.extend(['yy','uu','ii'])  #向右添加
    12 print(d)
    13 #deque(['1', '10', '1', 'yy', 'uu', 'ii'])
    14 d.extendleft(['aa','bb','cc'])  #向左添加
    15 print(d)
    16 #deque(['cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu', 'ii'])
    17 d.rotate(1)  #最后一个移到第一个
    18 print(d)
    19 #deque(['ii', 'cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu'])

    单向队列

    #单向队列
    import queue
    q = queue.Queue()
    q.put('123')
    q.put('678')
    print(q.qsize())
    print(q.get())  #先进先出
    # 2
    # 123
     
     
  • 相关阅读:
    前置++和后置++的区别
    snmp数据包分析
    [codeforces538E]Demiurges Play Again
    [codeforces538D]Weird Chess
    [BZOJ3772]精神污染
    [BZOJ4026]dC Loves Number Theory
    [BZOJ1878][SDOI2009]HH的项链
    [BZOJ3658]Jabberwocky
    [BZOJ3932][CQOI2015]任务查询系统
    [BZOJ3551][ONTAK2010]Peaks加强版
  • 原文地址:https://www.cnblogs.com/yoyovip/p/5596893.html
Copyright © 2020-2023  润新知