zoukankan      html  css  js  c++  java
  • 标准库之collections

    
    

    collections 模块----Python标准库,是数据结构常用模块

    
    

    常用类型有:

    
    

      计数器(Counter)   dict的子类,计算可hash的对象;

    
    

      双端队列(deque)  类似于list的容器,可以快速的在队列头部和尾部添加、删除元素;

    
    

      默认字典(defaultdict)  dict的子类,可以调用提供默认值的函数;

    
    

      有序字典(OrderedDict)  dict的子类,可以记住元素的添加顺序;

    
    

      可命名元组(namedtuple)  可以创建包含名称的tuple;

    
    
     1 #获取元素个数,返回字典
     2 
     3 >>> from collections import Counter
     4 >>> str='12312312312'
     5 >>> Counter(str)
     6 Counter({'1': 4, '2': 4, '3': 3})
     7 >>> dict(Counter(str))
     8 {'1': 4, '2': 4, '3': 3}
     9 >>> l = [1,2,3,4,5]
    10 >>> Counter(l)
    11 Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1})
    12 >>> d={'d':4,'e':2,'c':7}
    13 >>> Counter(d)
    14 Counter({'c': 7, 'd': 4, 'e': 2})
    
    
    most_common(),返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列;
    >>> Counter('what do you think you are good').most_common(3)
    [(' ', 6), ('o', 5), ('h', 2)]

    subtract(),从一个可迭代对象中或者另一个映射(或counter)中,元素相减,类似于dict.update(),但是subtracts 数目而不是替换它们,输入和输出都有可能为0或者为负;

    而update() 为相加

    >>> c=Counter({'a':3,'b':4,'c':1,'d':-2})
    >>> d=Counter({'a':1,'b':2,'c':3,'d':4})
    >>> c.substract(d)
    >>> c
    Counter({'a': 2, 'b': 2, 'c': -2, 'd': -6})

    namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

    这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。


    #
    命名元组 # from collections import namedtuple # # p = namedtuple('point', ['x', 'y']) # p1 = p(4,3) # p2 = p(3,4) # print(p1.x) # print(p2.y) # print(p(4,3)) # 双端队列
    deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。
    大部分列表的方法在这里也适用
     
    # from collections import deque
    # l = [1,2]
    # dq = deque(l)
    # dq.append(3)    # 将3添加到dq的右侧;
    # dq.appendleft(0)   # 添加到左侧
    # dq.insert(4,5)
    # print(dq.pop())    #  移除和返回deque中最右侧的元素
    # print(dq.popleft())   #  移除和返回deque中最左侧的元素,
    # print(dq)
    # dq.clear()  #  清零,元素长度为0
    # dq.count(2) # 返回元素的个数

    # # 有序的字典 # from collections import OrderedDict # # od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) # print(od) # print(od['b']) # for i in od.items(): # print(i)
    defaultdict
    使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict 

     注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

     除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。


    # 默认字典 # from collections import defaultdict
    #
    d = defaultdict(lambda : 0)
    #
    print(d['a']) # 没有a这个键,返回0
  • 相关阅读:
    .htaccess是什么?.htaccess几个简单应用
    php提高效率
    php require和include区别
    excel的常用公式
    php时间日期处理
    json详解
    python列表-增强的赋值操作
    python列表-使用
    python列表-简单操作
    python列表-定义
  • 原文地址:https://www.cnblogs.com/hhsh/p/9581869.html
Copyright © 2011-2022 走看看