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

    <!doctype html>python标准库之collection

    python标准库之collections

    最近在工作零零散散的用到了一些collections的方法,突然有个想法来将它整理一下。


    简介

    collections是python中基础数据类型的容器模块,提供了更加便捷和快速的数据类型操作的方法,我们可以在合适的场景去运用他们。

    常用方法

    • Counter()

      统计序列中元素的个数:

      作为输入, Counter 对象可以接受任意的由可哈希(hashable)元素构成的序列对象。 在底层实现上,一个 Counter 对象就是一个字典,将元素映射到它出现的次数上。

       
       
       
      xxxxxxxxxx
       
       
       
       
      from collections import Counter
      def test_counter():
          text = "kshfkhdghskdnvknsighdsihinisdhguidhicoidsjiohfiuerhrfjsiohgi"
          words = Counter(text)
          print(words.items())  # 序列中各元素出现的次数
          print(words.most_common(3))  # 序列中出现次数最多的三个
          print(words["k"])  # 查看序列中某个元素出现的次数
          
      if __name__ == '__main__':
          test_counter()
          
      """
      dict_items([('k', 4), ('s', 7), ('h', 10), ('f', 3), ('d', 6), ('g', 4), ('n', 3), ('v', 1), ('i', 11), ('u', 2), ('c', 1), ('o', 3), ('j', 2), ('e', 1), ('r', 2)])
      [('i', 11), ('h', 10), ('s', 7)]
      4
      """
       
    • defaultdict()

      看了很多对defaultdict的解释没有一个能完美通俗的解释清楚的,那我们就简单从字面上去理解他吧,我觉得这样反倒更清晰。

      定义一个默认格式的字典,他是dict的一个子类,那怎么定义一个默认格式的字典呢,请看下面的例子

       
       
       
      xxxxxxxxxx
       
       
       
       
      from collections import defaultdict
      def test_defaultdict():
          d = defaultdict(list)  # 创建一个value默认为list类型的字典
          d["a"].append(1)
          d["a"].append(2)
          d["a"].append(3)
          print(d)
          print(d["a"])
          print(d["b"])  # 即使没有key("b"),取值也不会报错,依然会有默认值[]
          s = defaultdict(set)  # 创建一个value默认为list类型的字典
          s["aa"].add(1)
          s["aa"].add(2)
          print(s["aa"],"__", s["bb"])
      if __name__ == '__main__':
          test_defaultdict()
          
      """
      defaultdict(<class 'list'>, {'a': [1, 2, 3]})
      [1, 2, 3]
      []
      {1, 2} __ set()
      """
       
    • OrderDict()

      OrderDict()字典排序,我们知道python的基本数据类型字典是无序的,但是我们想创建一个有序的字典怎么办呢?这个时候我们就可以用OrderDict()来创建,它会保留键值插入的顺序并以此顺序排列。

      OrderDict内部维护着一个根据键值插入顺序的双向链表,每当一个新的元素被插入进来的时候,它会被放到链表的尾部。对于一个已存在的键值赋值不会改变键值的顺序。

      需要注意的是OrderDict是一个普通字典大小的两倍,因为它内部维护着另外一个链表。使用时要注意这点。

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

      namedtuple()是一个方法生成的对象是tuple的子类,用来定义一个有指定含义的元组,通常我们定义一个元组无法知道他内部元素的含义,但是使用了namedtuple()就可以很清晰的知道这个元祖的的元素是用来干什么的

       
       
       
      x
       
       
       
       
      from collections import deque, namedtuple
      def test_namedtuple():
          Person = namedtuple("Person", ["name", "age", "gender"])
          person = Person("lily", 20, "female")
          print(person.age)
          print(person.name)
          print(person.gender)
      if __name__ == '__main__':
          test_namedtuple()
          
      """
      20
      lily
      female
      """
       
    • deque()

      deque()可以创建一个队列容器,供我们消费,它与python的队列的区别在于deque()在增加元素的时候,超出设定元素个数大小时,会默认删除最早的那个;同时deque不像list是一个线性存储,deque是一个双向链表,数据量大的时候插入效率大大高于list

       
       
       
      x
       
       
       
       
      from collections import deque
      def test_deque():
          q1 = deque(maxlen=3)
          q1.append(1)
          q1.append(2)
          q1.append(3)
      q1。qppend(4)
          print(q1)
      if __name__ == '__main__':
          test_deque()
      # deque([2, 3, 4], maxlen=3)
       

      deque包含的方法:其中pop从队列的 尾部抛出数据,如果想从队列头部取数据则用popleft()

      image-20200623000756398

  • 相关阅读:
    php 延迟静态绑定: static关键字
    python分片
    用逗号分隔数字,神奇
    ubuntu 屏幕截图
    js 获取随机数
    netty : NioEventLoopGroup 源码分析
    LinkedList 源码分析
    面向对象
    JS
    网页
  • 原文地址:https://www.cnblogs.com/liusijun113/p/13190809.html
Copyright © 2011-2022 走看看