zoukankan      html  css  js  c++  java
  • Python学习——collections系列

    一 ,计数器(counter) 

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

    例:
    >>> from collections import Counter
    >>> c = Counter('aadsassdsdads')
    >>> print(c)
    Counter({'a':4,'d':4,'s':5})

    基本操作方法:
    >>> c = Counter('abcdeabcdabcaba')

    1.most_common(N)数量从大到小排列,获取前N个元素
    >>> c.most_common(3)
    [('a', 5), ('b', 4), ('c', 3)]

    2.sorted()列出所有不同的元素并排序
    >>> sorted(c)
    >>> ['a','b','c','d','e']

    3.转换成字符串
    >>> ''.join(sorted(c.elements()))
    'aaaaabbbbcccdde'

    4.取得元素重复次数的值
    >>> c['a']
    5

    5.更新并添加元素重复次数
    >>> for elem in 'shazam':
        c[elem] += 1 #每个元素的次数加1
    >>> c['a']
    7
    >>> print(c)
    Counter({'a':7,'b':4,'c':3,'d':2,'s':1,'h':1,'z':1,'m':1,'e':1})

    6.update()更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一
    >>> d = Counter('simsalabim')
    >>> c.update(d)
    >>> c['a']
    9
    >>> print(c)
    Countr({'a':9,'b':5,'s':3,'c':3,'m':3,'i':2,'d':2,'h':1,'l':1,'z':1,'e':1})

    7.清空字典
    >>> c.clear()
    >>> c
    Counter()

    8.elements()取得计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器
    >>> c = Counter('abcabc')
    >>> sorted(c.elements())
    ['a','a','b','b','c','c']

    9.subtract()相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量
    >>> c = Counter('which')
    >>> print(c)
    Counter({'h':2,'c':1,'w':'1','i':1})
    >>> c.subtract('watch')
    >>> c['h']
    1
    >>> c['w']
    0
    >>> print(c)
    Counter({'h':1,'i':1,'w':0,'c':0,'t':-1,'a':-1})

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

    >>> from collections import OrderedDict
    >>> dic = OrderedDict()
    >>> dic['k1'] = 'v1'
    >>> dic['k2'] = 'v2'
    >>> dic['k3'] = 'v3'
    >>> print(dic)
    OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

    基本操作方法:

    1.取得字典所有的键
    >>> dic.keys()

    2.取得字典所有值
    >>> dic.values()

    3.items() 方法以列表返回可遍历的(键, 值) 元组数组
    >>> dic.items()
    odict_items([('k1','v1'),('k2','v2'),('k3','v3')])

    4.pop()方法,删除指定的键值
    >>> dic.pop('k1')
    'v1'
    >>> print(dic)
    OrderedDict([('k2','v2'),('k3','v3')])

    5.popitem()方法,默认删除字典最后一个元素
    >>> dic.popitem()
    ('k3','v3')
    >>> print(dic)
    odict_items([('k1','v1'),('k2','v2')])

    6.move_to_end('k')方法将指定键值一道最后
    >>> dic.move_to_end('k1')
    >>> print(dic)
    OrderedDict([('k2', 'v2'), ('k3', 'v3'),('k1', 'v1')])

    7.update()更新字典
    >>> dic.update({'k1':'v1111','k10':'v10'})
    >>> print(dic)
    OrderedDict([('k1', 'v1111'), ('k2', 'v2'), ('k3', 'v3'),('k10','v10')])

    三 , 默认字典 defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。

    例:
    集合 [11,22,33,44,55,66,77,88,99...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66 , 'k2': 小于66}
    原生字典解决方法:
     1 values = [11, 22, 33,44,55,66,77,88,99] 
     2 my_dict = {} 
     3 for value in  values:     
     4   if value>66:         
     5     if my_dict.has_key('k1'):             
     6       my_dict['k1'].append(value)         
     7     else:             
     8       my_dict['k1'] = [value]     
     9   else:         
    10     if my_dict.has_key('k2'):             
    11       my_dict['k2'].append(value)         
    12     else:             
    13       my_dict['k2'] = [value]

    默认字典解决方法:
    1 from collections import defaultdict 
    2 values = [11, 22, 33,44,55,66,77,88,99] 
    3 my_dict = defaultdict(list)                 #默认将字典设置成列表类型 
    4 for value in  values:     
    5   if value>66:         
    6     my_dict['k1'].append(value)     
    7   else:         
    8     my_dict['k2'].append(value)

    四,可命名元祖(namedtuple)
    根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。

    from collections import namedtuple #创建(给元祖命名)
    >>> Mytuple = namedtuple('Mytuple',['x','y','z'])
    >>> obj = Mytuple(11,22,33) #通过x,y,z取得元祖的值
    >>> obj.x 11
    >>> obj.y 22
    >>> obj.z 33

    五,双向队列(deque)
    一个线程安全的双向队列

    from collections import deque #创建双向队列
    >>> d = deque()
    >>> d.append('1')
    >>> d.append('2')

    1.append()向队列中插入数据(从右边插入)
    >>> d.append('3')
    >>> print(d)
    deque(['1','2','3'])

    2.appendleft()向队列中插入数据(从左边插入)
    >>> d.appendleft('4')
    >>> print(d)
    deque(['4','1','2','3'])

    3.clear()清空队列
    >>> d.clear()
    >>> print(d)
    deque([])

    4.count()计数
    >>> d.append('1')
    >>> print(d)
    deque(['1','2','1'])
    >>> d.count('1')
    2

    5.extend()从右边向队列添加额外元素
    >>> d.extend(['qq','ww','ee'])
    >>> print(d)
    deque(['1','2','qq','ww','ee'])

    6.extendleft()从左边向队列添加元素
    >>> d.extendleft(['qq','ww','ee'])
    >>> print(d)
    deque(['qq','ww','ee','1','2'])

    7.index()取得元素下标
    >>> d.index('1')
    0

    8.insert()指定位置插入元素
    >>> d.insert(1,'nn')
    >>> print(d)
    deque(['1','nn','2'])

    9.pop()从右边移除一个元素
    >>> d.pop()
    2
    >>> print(d)
    deque(['1','nn'])

    10.popleft()从左边移除一个元素
    >>> d.popleft()
    1
    >>> print(d)
    deque(['nn'])

    11.remove()移除指定元素
    >>> d.remove('1')
    >>> print(d)
    deque(['2'])

    12.reverse()反转队列
    >>> print(d)
    deque(['1','2'])
    >>> d.reverse()
    >>> print(d)
    deque(['2','1'])

    13.rotate()将右边指定的元素个数移到队列左边
    >>> d.append('4')
    >>> d.append('5')
    >>> d.append('6')
    >>> print(d)
    deque(['1','2','3','4','5','6'])
    >>> d.rotate(3)
    >>> print(d)
    deque(['4','5','6','1','2','3'])

    六,单向队列(先进先出 FIFO )
    import queue # 创建单向队列
    >>> q = queue.Queue()

    1.添加元素
    >>> q.put('11')
    >>> q.put('22')

    2.qsize()获取队列中元素个数
    >>> q.qsize()
    2

    3.get()取得元素(先进先出)
    >>> q.get()
    11
    >>> q.get()
    22
  • 相关阅读:
    转--后台开发人员的技术栈
    hadoop +streaming 排序总结
    python 的tempfile学习
    hadoop学习日志
    shell sort 排序大讨论
    系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
    推荐系统评测指标--准确率(Precision)和召回率(Recall)、F值(F-Measure)
    shell 数组
    leecode第七百四十六题(使用最小花费爬楼梯)
    leecode第四百七十五题(供暖器)
  • 原文地址:https://www.cnblogs.com/huan-ge/p/6690929.html
Copyright © 2011-2022 走看看