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
  • 相关阅读:
    hdu 3790 最短路径问题
    hdu 2112 HDU Today
    最短路问题 以hdu1874为例
    hdu 1690 Bus System Floyd
    hdu 2066 一个人的旅行
    hdu 2680 Choose the best route
    hdu 1596 find the safest road
    hdu 1869 六度分离
    hdu 3339 In Action
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/linga/p/9363616.html
Copyright © 2011-2022 走看看