zoukankan      html  css  js  c++  java
  • python collection模块

    一、模块的认识

      定义:模块就是我们把装有特定功能的代码进行归类的结果。

      说明:从代码编写的单位来看我们的城西,从小到大:一条代码 -> 语句块 - >代码块(函数、类)-> 模块。

      模块引入的方法:

        1、import 模块

        2、from xxx import 模块

    二、collections模块

      collectionz模块中主要封装了一些关于集合类的相关操作,比如之前学过的Iterable,Iterator等等,今日主要记录的是Couter,deque,OrderDict,defaultdict,defaultdict以及namedtuple.

     (1)Couter

      Couter时一个计数器,主要用于计数.

    # 计算字符串中每个元素出现的次数
    # 普通方法
    str="alex like pig"
    dic={}
    for el in str:
        dic[el]=dic.setdefault(el,0)+1
    print(dic)
    # 借用collections模块中 的Counter(计数器)
    str="alex like pig"
    import collections
    print(collections.Counter(str))
    
    from collections import Counter
    c=Counter(str)
    print(Counter(c)) # 获取到的结果可以像字典⼀样进⾏使⽤ [key]

      (2)deque 双向队列

        1. : FILO. 先进后出 -> 砌墙的砖头, 老师傅做馒头    

    # 栈 track (先进后出)
    class TrackFullError(Exception):
        pass
    class TrackEmptyError(Exception):
        pass
    class Track:
        def __init__(self,size):
            self.index=0
            self.lst=[]
            self.size=size
    
        def push(self,item):
            '''
            入栈
            :param item: 入栈元素
            :return:
            '''
            if self.index>4:
                raise TrackFullError("Track is Full")
            self.lst.insert(self.index,item)
            self.index+=1
            print(self.lst)
        def pop(self):
            '''
            出栈
            :return:
            '''
            self.index-=1
            if self.index<0:
                raise TrackEmptyError("Track is Empty")
            item=self.lst.pop(self.index)
            print(item)

        2. 队列: FIFO. 先进先出 -> 买火⻋票排队所有排队的场景

            注意. 如果队列⾥没有元素了. 再也就拿不出来元素了. 此时程序会阻塞

    #队列queue (先进先出)
    import queue
    # 创建队列对象
    q=queue.Queue()
    q.put("")
    q.put("")
    q.put("")
    q.put("")
    
    print(q.get()) #赵
    print(q.get()) #钱
    print(q.get())  #孙
    print(q.get())  #李
    # print(q.get()) 队列里面没有元素,会等待,不报错

      双向队列 :deque

      说明:既能从左进,也能从右进;既能从左边出也能从右边出。

    from collections import deque
    
    c=deque()
    c.append("") #从右侧开始添加
    c.append("")
    c.appendleft("") #从左侧开始添加
    c.appendleft("")
    
    print(c) #deque(['雷', '电', '风', '雨'])
    print(c.pop()) #从右侧开始弹出
    print(c.pop())
    print(c.popleft())
    print(c.popleft())#从左侧开始弹出
    print(c.popleft()) #IndexError: pop from an empty deque

      (3)命名元组 namedtuple

        命名元组:本质就是一个元组,命名元祖可以进行解包。

    # # 命名元祖 namedtuple 终归是一个元祖,不能更改
    from collections import namedtuple
    point=namedtuple("",["x","y"])
    p=point(5,10)
    print(p)
    print(p.x)
    print(p.y)
    # p.x=10 #can't set attribute
    # p.z=16 #AttributeError: '点' object has no attribute 'z'

      (4)defaultdict  字典默认值

        默认值 defaultdict执行流程:
          1、defaultdict中必须是一个可以被调用的对象;
          2、如果存在key,返回相应的value,如果不存在则执行可调用对象,并吧结果返回

    from collections import defaultdict
    # d=defaultdict(list)
    # print(d["华辣汤"])#当defaultdict中不存在"华辣汤",则执行了list( )

       (5)orderdictdefaultdict

           orderdict 顾名思义. 字典的key默认是⽆序的. OrderedDict是有序的 ,但是从python3.6以后的版本

      ,我们看到的字典都是有序的。

  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/9959788.html
Copyright © 2011-2022 走看看