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以后的版本

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

  • 相关阅读:
    netbeans 快捷键
    Netbeans Platform的Lookup 边学边记
    Swing中的并发使用SwingWorker线程模式
    转:ExtJS:tabpanel 多个tab同时渲染问题
    NetBeans Platform Login Tutorial
    检测项目
    C#实现通过程序自动抓取远程Web网页信息
    WebClient类
    string字符串的方法
    WebClient的研究笔记认识WebClient
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/9959788.html
Copyright © 2011-2022 走看看