• Python collections的使用


    collections是Python内建的一个集合模块,提供了许多有用的集合类。

    本文将介绍以下几种方法:

    namedtuple

    Counter()

    deque

    OrderedDict

    一、namedtuple  

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

    因为tuple是不可变类型,所以用namedtuple定义出来的对象经过初始化以后对象的属性是不可以改变的。

    >>> from collections import namedtuple
    >>> Stu = namedtuple("Student",["name","age","score"])
    >>> s = Stu("张三",17,450)
    >>> s
    Student(name='张三', age=17, score=450)
    >>> s.name
    '张三'
    >>> s.score
    450
    >>> s.age
    17
    >>> s.age=30
    Traceback (most recent call last):
      File "<pyshell#79>", line 1, in <module>
        s.age=30
    AttributeError: can't set attribute
    >>> 
    

      验证对象s是Stu的对象,也是tuple的一种子类

    >>> isinstance(s,Stu)
    True
    >>> isinstance(s,tuple)
    True
    

      同样的,如果要表示一个四边形的宽高:

    >>> TR = namedtuple("TR",["width","height"])
    >>> t = TR(10,20)
    >>> t
    TR(width=10, height=20)
    >>> t.width
    10
    >>> t.height
    20

    二、Counter()

    Counter是一个简单的计数器,用来统计一个字符串中每个字符出现的次数。

    >>> from collections import Counter
    >>> c = Counter()
    >>> c
    Counter()
    >>> for x in "whoami I am you":
    	c[x] += 1
    >>> c
    Counter({' ': 3, 'o': 2, 'a': 2, 'm': 2, 'w': 1, 'h': 1, 'i': 1, 'I': 1, 'y': 1, 'u': 1})
    >>> for x in c:
    	print(x,c[x])
    w 1
    h 1
    o 2
    a 2
    m 2
    i 1
      3
    I 1
    y 1
    u 1
    

      用c.key排序再删除:

    >>> for x in sorted(c.keys()):
    	print(x,c[x])
      3
    I 1
    a 2
    h 1
    i 1
    m 2
    o 2
    u 1
    w 1
    y 1
    

      

    三、deque

    使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

    deque是高效实现插入和删除操作的双向list,适合用于栈和队列

    >>> from collections import deque
    >>> l = [1,4,9,-10]
    >>> q = deque(l)
    >>> q
    deque([1, 4, 9, -10])
    >>> q.append(100)
    >>> q.pop()
    100
    >>> q.appendleft(0)
    >>> q
    deque([0, 1, 4, 9, -10])
    >>> q.popleft()
    0
    >>> q
    deque([1, 4, 9, -10])

     除了实现list的append()pop()外,还支持appendleft()popleft(),可以非常高效地往头部添加或删除元素。

    四、OrderedDict

    使用dict时,Key是无序的。如果要保持Key的插入顺序,可以用OrderedDict,OrderedDict的Key会按照插入的顺序返回,不是Key本身排序。

    >>> od = OrderedDict()
    >>> od['z'] = 1
    >>> od['y'] = 2
    >>> od['x'] = 3
    >>> list(od.keys()) # 按照插入的Key的顺序返回
    ['z', 'y', 'x']
    

      

  • 相关阅读:
    OpenGL ES multithreading and EAGLSharegroup
    NSRange用法(转)
    多测师肖老师_mysql之视图(10.1)
    多测师肖老师__三表(9.1)
    多测师肖老师__多表练习(8.1)
    多测师肖老师__多表讲解(7.9)
    多测师肖老师_mysql之单表练习(7.5)
    多测师肖老师__单表建表和练习(1.8)
    多测师肖老师_mysql之单表和多表题(9.2)
    多测师肖老师___分享杭州面试题
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/8643356.html
Copyright © 2020-2023  润新知