版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nizihabi/article/details/53032733
在python中,提供了两个数据结构给我们——deque和heapq。
collections.deque
deque是队列,可以通过设置队列的长度从而实现查找数据前N条记录的功能(关于什么是队列我这边就不多说了,不太清楚的读者可以百度一下,简单概括就是四个字:先进先出),它存在于collections这个模块中。
具体的设置和调用非常简单:
from collections import deque
q = deque(maxlen = 3) #这里构造了一个长度为3的队列
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append(4)
print(q)
大家可以运行一下上面的代码,我们可以看到,q里面始终保持着最新的3个参数,另外,如果不限定maxlen的话,你将会得到一个无限长的队列来维持你的数据,至于队列的更深一层用法,我这里就不细说,详情可以查阅BFS
heapq
heapq是python中实现小顶堆排序的模块,从小到大的顺序进行排序
利用heapq,我们可以轻松对数列进行堆排序处理:
import heapq
def heapSort(listVar):
temp = []
for item in listVar:
heapq.heappush(temp,item)
return [heapq.heappop(temp) for i in range(len(temp))]
l = [11,4,3,1,5,6,8,9,7]
print(heapSort(l))
我们可以看到,heapq里面提供了heappush和heappop函数,heappush,顾名思义就是把元素按堆的方式放入列表当中,heappop则是取最小的元素,如果堆是空,返回一个错误
另外,heapq里面还提供了一个heapify函数用来原地将列表转换成堆,所以上面的代码我们可以简化成如下:
import heapq
def heapSort(listVar):
heapq.heapify(listVar)
return [heapq.heappop(listVar) for i in range(len(listVar))]
l = [11,4,3,1,5,6,8,9,7]
print(heapSort(l))
heapq还提供了nlargest和nsmallest两个函数以提取最大(最小)的N个值,其中可以通过key=function()来实现复杂数据的提取