zoukankan      html  css  js  c++  java
  • python常见模块之collections模块

    一、模块简介

    在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
    
    1.namedtuple: 生成可以使用名字来访问元素内容的tuple
    
    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
    
    3.Counter: 计数器,主要用来计数
    
    4.OrderedDict: 有序字典
    
    5.defaultdict: 带有默认值的字典

    二、模块主要功能

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

    1 from collections import namedtuple
    2 Tup = namedtuple('name','x,y')
    3 t1 = Tup(1,2)
    4 print(t1)           # name(x=1, y=2)
    5 print(t1.x)         # 1
    6 print(t1.y)         # 2
    
    

    注意:(queue不是collections模块里的,在deque之前我们先来看一下queue)
    queue: 队列,里面可以存着好多值,只能往里面放值或者往外拿出,不能修改不能查看,而且先拿出的一定是最先放进去的

     1 import queue
     2 
     3 q = queue.Queue()
     4 q.put(10)
     5 q.put(5)
     6 q.put(6)
     7 
     8 print(q.get())
     9 print(q.get())
    10 print(q.get())


    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

    1 from collections import deque
    2 q = deque()
    3 q.append(1)#从后端插入值
    4 q.appendleft(2)#从前面插入值
    5 q.insert(1,4) #在指定索引位置插入值
    6 q.pop()#从后往前取值
    7 q.popleft()#从前面取值

    3.OrderedDict: 有序字典

    python中常规字典是无序的,每次查看位置都会不一样,而如果需要创建一个有序的字典就要用OrderedDict了。
    需要注意的是,OrderedDict虽然有序,但是也不能通过下标索引来找到元素

    1 from collections import OrderedDict
    2 dic = OrderedDict([('k1',1),('k2',2),('k3',3)])
    3 print(dic)  #OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
    4 print(dic['k2']) #2
    5 for i in dic:
    6     print(i)
    7 # k1
    8 # k2
    9 # k3

    4.defaultdict: 带有默认值的字典

    可以为字典指定一个默认值,默认值可以是列表,字典等一切可以被调用的对象

    1 from collections import defaultdict
    2 dic1 = defaultdict(list) #创建一个字典,每个键所对应的值都是一个列表
    3 print(dic1['k1'])
    4 dic2 = defaultdict(dict) #创建一个字典,每个键所对应的值都是一个字典
    5 print(dic2['k1'])
    6 dic3 = defaultdict(lambda:5) #创建一个字典,每个键所对应的值都是5 (不能直接写5,因为括号内是能被调用的)
    7 print(dic2['k1'])

    三、应用实例

    # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    # 即: {'k1': 大于66 , 'k2': 小于66}

    1 from collections import defaultdict
    2 l = [11,22,33,44,55,66,77,88,99,90]
    3 dic = defaultdict(list)
    4 for i in l:
    5     if i>66:
    6         dic['k1'].append(i)
    7     elif i<66:
    8         dic['k2'].append(i)
    9 print(dic)  #defaultdict(<class 'list'>, {'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]})
  • 相关阅读:
    codeforces 616B Dinner with Emma
    codeforces 616A Comparing Two Long Integers
    codeforces 615C Running Track
    codeforces 612C Replace To Make Regular Bracket Sequence
    codeforces 612B HDD is Outdated Technology
    重写父类中的成员属性
    子类继承父类
    访问修饰符
    方法的参数
    实例化类
  • 原文地址:https://www.cnblogs.com/fu-yong/p/8259243.html
Copyright © 2011-2022 走看看