一、堆
#首先导入heapq库
help(heapq)#首先学会使用帮助文档 import heapq import random #堆中的元素是存储在列表里面的 #创建堆有两种方法 #建堆方法一:逐个创建 data = list(range(10)) #随机选取一个列表中的元素 print(random.choice(data)) #随机打乱顺序 print(random.shuffle(data)) #建堆 aheap = [] for i in data: heapq.heappush(aheap,n) #原则:入堆自动重建,出堆自动重建 heapq.heappush(aheap,0.5) heapq.heappop(aheap,0) #建堆方法二: myheap = [1,2,3,4,5,6,7,8,9] heapq.heapify(myheap) #弹出最小元素,同时插入新元素 heapq.replace(myheap,6) #返回前n个最大的元素 heapq.nlargest(n,myheap) #返回前n个最小的元素 heapq.nsmallest(n,myheaq)
二、队列
#python提供了4种队列 #可以用列表来模拟队列结构 x = [1,2,3,4] x.append(5)#向队尾即列表尾部添加元素 x.pop(0)#删除队头即列表头部元素,若队列为空则会抛出异常 #队列种类1:先进先出LILO from queue import Queue q = Queue()#创建队列对象 q.put(0) q.put(1)#在队列尾部插入元素 q.get()#返回并删除队列头部元素 print(q.queue)#查看队列中所有元素,注意,这里的方法后面没有括号 #输出:deque([0, 1, 2, 3, 4, 5, 6]) #队列种类2:后进先出LIFO from queue import LifoQueue q = LifoQueue()#创建队列对象 q.put(0) q.put(1)#在队列尾部插入元素 q.get()#返回并删除队列尾部元素,如果对空队列调用,会阻碍当前的线程 print(q.queue)#查看队列中所有元素,注意,这里的方法后面没有括号 #队列种类3:优先级队列 from queue import PriorityQueue q = PriorityQueue()#创建优先级队列对象 q.put(0) q.put(1)#插入元素 q.get()#返回并删除优先级最低的元素 q.put(1)#插入元素,自动调整优先队列,可以多执行几次并观察返回的数据 print(q.queue)#查看队列中所有元素 #队列种类4:双端队列 from collections import deque q = deque(maxlen=5)#创建一个长度为5的双端队列 for item in [3,5,7,9,11]:#添加元素 q.append(item) q.append(34)#队列满,左侧溢出 q.appendleft(45)#从左侧添加元素,从右边溢出 #注意,这里没有从右侧添加元素,从左边溢出q.appenright(44)的方法 q.pop()#相当于q.popleft()从左侧移除元素
三、栈
#栈是一种“后进先出(LIFO)”或者“先进后出(FILO)”的数据结构 #列表对象的append()方法是在列表尾部追加元素,pop()方法是弹出并返回列表最后一个元素,这跟入栈出栈很像,但是直接用列表来实现栈不是最完美的 myStack = [] myStack.append(3)#[3,] myStack.append(5)#[3,5] myStack.pop()#[3,] myStack.pop()#[] myStack.pop()#出错