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

    collections模块:

    在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

    • namedtuple : tu = (x=1,y=2)
    • deque:双端队列(队列:先进先出,天猫限量抢购,栈:先进后出,计算机底层)
    • OrderedDict:按照键的添加值的顺序排列
    • defaultDict:默认给字典所有的键设置一个值,defaultDict(可调用对象)
    • Counter:自动计数能.n = 'aabbccccsssdddd' 'a:2,b:2,c:4,s:3,d:4

    1.计数器(counter)

    counter是对字典的方法,用来追踪值的出现次数;具备字典的所有功能和自己的功能。

    >>> from collections import Counter
    >>> d2 = Count
    >>> d2 = Counter('abbcccddd')  #对值计数
    >>> print(d2)
    Counter({'d': 3, 'c': 3, 'b': 2, 'a': 1})
    >>> print(type(d2))
    <class 'collections.Counter'>
    >>> d2 = Counter('abbcccddd')
    >>> for i in d2.elements():    #计数元素迭代器
    ...   print(i)
    ... 
    b
    b
    a
    d
    d
    d
    c
    c
    c
    >>> d2.clear()   #清空元素
    >>> print(d2)
    Counter()
    
    >>> d3 = d2.copy()  #拷贝
    >>> d3
    Counter({'d': 3, 'c': 3, 'b': 2, 'a': 1})
    
    >>> d2.update('ddffffff')   #更新
    >>> d2
    Counter({'f': 6, 'd': 5, 'c': 3, 'b': 2, 'a': 1})
    
    >>> d2.subtract('fffff')  #减去元素个数
    >>> d2
    Counter({'d': 5, 'c': 3, 'b': 2, 'a': 1, 'f': 1})
    
    >>> d4 = d2.pop('f')  #提取dict的key
    >>> d4
    >>> d2
    Counter({'d': 5, 'c': 3, 'b': 2, 'a': 1})
    Counter

    2、有序字典(OrderedDict)

    OrderedDict是对字典的补充,它可以记住字典元素添加的顺序。

    >>> from collections import OrderedDict
    >>> dic1 = OrderedDict({'k1':'v1','k2':'v2','k4':'v4','k3':'v3'})
    >>> dic1    #创建有序列的字典
    OrderedDict([('k4', 'v4'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    >>> print(type(dic1))
    <class 'collections.OrderedDict'>
    >>> dic1.popitem()    #默认提取最后要给key
    ('k3', 'v3')
    >>> dic1
    OrderedDict([('k4', 'v4'), ('k1', 'v1'), ('k2', 'v2')])
    >>> dic1.move_to_end('k4')   #将指定key移到最后
    >>> dic1
    OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k4', 'v4')])
    OrderedDict

    3、默认字典(defaultdict)

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

    >>> from collections import defaultdict
    >>> dict1 = defaultdict(list)   #创建默认字典
    >>> dict1
    defaultdict(<class 'list'>, {})
    >>> print(type(dict1))
    <class 'collections.defaultdict'>
    >>> for i in range(20):  #实例
    ...   if i%2 == 0:
    ...     dict1['k1'].append(i)
    ...   else:
    ...     dict1['k2'].append(i)
    ... 
    >>> dict1
    defaultdict(<class 'list'>, {'k1': [0, 2, 4, 6, 8, 10, 12, 14, 16, 18], 'k2': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]})
    defaultDict

    4、可命名元组(namedtuple)

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

    >>> from collections import namedtuple
    >>> tup1 = namedtuple('tup1',['x','y','z','u'])  #创建可命名元组
    >>> obj = tup1(111,22,333,4444)  #创建对象
    >>> print(obj.x)   #输出对象序列的值
    >>> print(obj.y)
    >>> print(obj.z)
    >>> print(obj.u)
    namedtuple

     5、双端队列(deque)

    使用list 存储数据时,按照索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

    >>> from collections import deque
    >>> q = deque(['a','b','c'])
    >>> q.append('x')    # 默认添加列表最后一项
    >>> q.appendleft('y')  # 添加到列表第一项
    >>> q
    deque(['y', 'a', 'b', 'c', 'x'])
    >>> q.pop()  # 默认删除列表最后一个元素
    'x'
    >>> q.popleft()  # 删除列表的第一个元素
    'y'
    >>> q
    deque(['a', 'b', 'c'])
    deque
  • 相关阅读:
    .Net中获取打印机的相关信息
    如何在windows server 2008上配置NLB群集
    jvm分析内存泄露
    JVM调优
    线程池工作队列饱和策略
    线程池的处理流程:
    Java的Executor框架和线程池实现原理(转)
    线程池实现原理详解:
    futer.get()(如果任务没执行完将等待)
    sql注入
  • 原文地址:https://www.cnblogs.com/linga/p/9363616.html
Copyright © 2011-2022 走看看