Python 小技巧——<Cookbook>读书笔记(2)deque和heapq

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()来实现复杂数据的提取

猜你喜欢

转载自blog.csdn.net/nizihabi/article/details/53032733
今日推荐