zoukankan      html  css  js  c++  java
  • Python -- colllection模块

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

    1. namedtuple :生产可以使用名字来访问元素内容的tuple

      from collections import namedtuple
      Point = namedtuple('Point',['x','y'])
      p = Point(1,2)
      print(p.x,p.y)  # 1 2
      
    2. deque : 双端队列,可以快速的从另外一侧追加和退出对象

      # 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
      # deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
      
      from collections import deque
      q = deque(['a','b','c'])
      q.append('d')
      q.appendleft(0)
      print(q)  deque([0, 'a', 'b', 'c', 'd'])
      
      deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
      
    3. Counter : 计数器,主要用来计数

      # Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。
      from collections import Counter
      s = Counter('asgfdg')
      print(s)
      Counter({'g': 2, 'a': 1, 's': 1, 'f': 1, 'd': 1})
      
    4. OrderedDict : 有序字典

      # 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict:
      from collections import OrderedDict
      d = dict([('a', 1), ('b', 2), ('c', 3)])
      print(d)  # dict 的字典是无序的
      
      od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
      print(od)  # OrderedDict的字典是有序的
      OrderedDict([('a', 1), ('b', 2), ('c', 3)])
      
    5. defaultdict : 带有默认值的字典

      from collections import defaultdict
      values = [11,22,33,44,55,66,77,88,99]
      dic = defaultdict(list)
      for i in values:
          if i > 66:
              dic['key1'].append(i)
          else:
              dic['key2'].append(i)
      print(dic) 
      defaultdict(<class 'list'>, {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]})
      
      # 原生字典的解决方法
      l = [11,22,33,44,55,66,77,88,99]
      dic = {}
      for i in l:
          if i > 66:
              if 'key1' not in dic:
                  dic['key1'] = []
              dic['key1'].append(i)
          else:
              if 'key2' not in dic:
                  dic['key2'] = []
              dic['key2'].append(i)
      print(dic)
      {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]}
      
  • 相关阅读:
    (step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)
    两款商业拓扑发现软件siteview和ElementSentry的比较
    20岁到30岁,我拿十年做什么
    新浪微博私信,即时聊天接口研究
    “adb server is out of date. killing.... ADB server didn't ACK * failed to start daemon * ”
    【Java&Android开源库代码剖析】のandroid-smart-image-view
    dns智能解析对网站排名的影响
    SQL Server 权限管理
    objective-c 中数据类型之四 字典(NSDictionary)
    IOS总结_实现UIButton的图文混排(二)
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11135083.html
Copyright © 2011-2022 走看看