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

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

原文地址:https://www.cnblogs.com/angle6-liu/p/9959788.html