zoukankan      html  css  js  c++  java
  • python-collections模块

    简介

    本篇主要介绍collections模块中的以下几样:

    ①计数器counter()

    ②有序字典OrderedDict()

    ③默认字典defaultdict()

    ④双向队列deque()

    一、计数器counter()

    counter 是一种特殊的字典,主要方便用来计数,它继承于dict类,因此具有dict类中所有的功能,此外,还具备了自己特有的功能

    一小部分源码:

    import collections
    obj=collections.Counter('aabbddsafd')             #创建一个counter对象
    print(obj)
    
    -----结果-----
    Counter({'a': 3, 'd': 3, 'b': 2, 's': 1, 'f': 1})
    

    1.most_common()

    统计出现次数最多的几个元素

    import collections
    obj=collections.Counter('aabbddsafd')
    print(obj)
    print(obj.most_common(4))                         #拿到前四位
    
    -----结果------
    [('a', 3), ('d', 3), ('b', 2), ('s', 1)]
    

    2.更新update()

    import collections
    obj=collections.Counter('aaabb')
    print(obj)
    obj.update([11,22,'a'])
    print(obj)
    
    -----结果-----
    Counter({'a': 3, 'b': 2})
    Counter({'a': 4, 'b': 2, 11: 1, 22: 1})
    

    3.删除元素subtract()

    import collections
    obj=collections.Counter('aaabb')
    print(obj)
    obj.subtract(['a','11'])
    print(obj)
    
    -----结果-----
    Counter({'a': 3, 'b': 2})
    Counter({'a': 2, 'b': 2, '11': -1})
    

    注意:使用subtract()时,如果元素不够扣除,相应元素的个数会以负数的形式展示

    4.获取元素elements() 

    用counter()产生的对象,看上去像一个字典,其实并不是真实的字典,想要取其中的元素,得用elements()去获取

    import collections
    obj=collections.Counter('aabbddsafd')
    for k in obj.elements():
        print(k)
    
    -----结果-----
    a
    a
    a
    b
    b
    .
    .
    

    注意:如果想要取出其中key和values,得用dict类中的方法

    import collections
    obj=collections.Counter('aabbddsafd')
    for k,v in obj.items():
        print(k,v)
    
    -----结果-----
    a 3
    b 2
    d 3
    s 1
    f 1
    

    二、有序字典OrderedDict()

     创建一个有序字典:

    import collections
    dic=collections.OrderedDict()
    dic['k1']='v1'
    dic['k2']='v2'
    dic['k3']='v3'
    print(dic)
    
    -----结果-----
    OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    

    1.移动到末尾move_to_end()

    import collections
    dic=collections.OrderedDict()
    dic['k1']='v1'
    dic['k2']='v2'
    dic['k3']='v3'
    dic.move_to_end('k1')
    print(dic)
    
    -----结果-----
    OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    

    2.删除pop()与popitem()

    #pop()
    import collections
    dic=collections.OrderedDict()
    dic['k1']='v1'
    dic['k2']='v2'
    dic['k3']='v3'
    dic.pop('k1')
    print(dic)
    -----结果-----
    OrderedDict([('k2', 'v2'), ('k3', 'v3')])
    
    
    
    #popitem()     
    import collections
    dic=collections.OrderedDict()
    dic['k1']='v1'
    dic['k2']='v2'
    dic['k3']='v3'
    dic.popitem()             
    print(dic)
    -----结果-----
    OrderedDict([('k1', 'v1'), ('k2', 'v2')])
    

    对比结果可知,popitem()是去除最后一个元素,且其中不需要加入参数值,pop()是删除指定的元素,其中需要加入参数值,且删除的值可重新生成一个对象

    3. 设定默认值

    import collections
    dic=collections.OrderedDict()
    dic['k1']='v1'
    dic['k2']='v2'
    dic['k3']='v3'
    dic.setdefault('k4')        #当不指定值的时候,默认为None,效果等同于dic['k4']=None
    print(dic)
    
    -----结果-----
    OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None)])
    

    三、默认字典defaultdict()

    作用:定义一个字典,让这个字典的值默认为某个类型

    创建一个默认字典:

    import collections
    dic = collections.defaultdict(list)     #对字典里值设置为list类型
    dic['k1'].append('test001')             #append是list类才有的方法,由于设了默认类型,才能用
    print (dic)
    
    -----结果-----
    defaultdict(<class 'list'>, {'k1': ['test001']})
    

    四、可命名元组nametuple()

    通常的元组,如果想要访问里面的元素,是只能通过索引去访问,如t[0]。而在可命名元组中,则可以针对每个元素定义一个名字,通过名字去访问相应的名字

    注意:在collections包中,可命名元组与其他不同的是:创建计数器、有序字典这些对象时,都是由相应的类产生的,但是,在该包中,没有"可命名元组"这个类,

             想要使用可命名元组,首先得创建一个类。通过nametuple()这个方法,去创建相应的类

    import  collections
    MytupleClass=collections.namedtuple('MytupleClass',['x','y','z'])    #创建类MytoupleClass
    obj=MytoupleClass(11,22,33)                                          #通过类创建了对象,其中x=11,y=22,z=33
    print(obj.x)
    print(obj.y)
    print(obj.z)
    
    -----结果-----
    11
    22
    33

    其中,MytupleClass是创建的类,obj为该类创建的对象,想看查看该类下面有哪些功能,可以使用如下方法:

    print(help(MytupleClass))

    部分截图如下:

    五、双向队列deque()

    队列是类似于栈一样的一种数据结构

    单向队列:先进先出,一端进,另一端出

    双向队列:在一端可以进和出,在另一端也可进和出

    1.添加元素

    import collections
    d=collections.deque()
    d.append('a')                  #从右边添加
    d.append('b')
    d.appendleft(1)                #从左边添加
    d.appendleft(2)
    print(d)  
    print(d.count('a'))            #用count()统计元素出现的个数
     
    -----结果-----
    deque([2, 1, 'a', 'b'])
    1
    

    2.扩展元素

    import collections
    d=collections.deque()
    d.extend(['aa','bb'])          #从右侧扩展
    d.extendleft([11,22])          #从左侧扩展
    print(d)
    
    -----结果-----
    deque([22, 11, 'aa', 'bb'])
    

      

    3.获取索引位置

    import collections
    d=collections.deque([1,2,3])
    print(d.index(1))
    
    -----结果-----
    0
    

    4.删除

    import collections
    d=collections.deque([1,2,3])
    d.pop()                #从右侧删除
    print(d)
    d.popleft()            #从左侧删除
    print(d) 
    
    -----结果-----
    deque([1, 2])
    deque([2])

    5.移动元素至首位

    import collections
    d=collections.deque([a,b,c])
    d.rotate(1)          # 把最后一个元素放到首位
    print(d)
    
    -----结果-----
    deque([c, a, b])
    

    其余一些方法不一一介绍....

    六、单向队列

    单向队列不属于collections包中,而在queue包中

    创建一个单向队列

    import  queue
    q=queue.deque()

    单向队列的方法在此文中不做介绍 

  • 相关阅读:
    《Linux就该这么学》第十二课
    《Linux就该这么学》第十一课
    《Linux就该这么学》第十课
    《Linux就该这么学》第九课
    《Linux就该这么学》第八课
    模板层
    路由层
    git的使用
    属性选择器
    高级选择器
  • 原文地址:https://www.cnblogs.com/nizhihong/p/6641306.html
Copyright © 2011-2022 走看看