今天发现了一个很好玩的python模块-heapq
heapq是python核心库之一,运用的是最小堆的排序算法。它保证了列表在一系列操作之后,始终保证了a[0]是最小值。
最小堆排序算法:简单来说,就是数据储存在一个二叉树中,这个二叉树的父结点始终比子结点小,因此根结点就是最小的值。每次取出最小值,只要比较两个子结点就可以决定根的值,下一个最小值也就继续留在a[0]
In [1]: from heapq import *
In [2]: h = [2,3,4,1,6,3,5,8,6]
In [3]: heappop(h)
Out[3]: 2
应用场景还是很广泛的,比如我设计了一个排行榜,每次显示前十名。这里有可以取多组最大和最小值的方法:
In [5]: nlargest(3, h)
Out[5]: [8, 6, 6]
In [6]: nsmallest(2, h)
Out[6]: [1, 3]
另外这个类似于字典的功能更有趣:
In [7]: h = []
In [8]: heappush(h, (5, 'shoot'))
In [9]: heappush(h, (3, 'fly'))
In [10]: heappush(h, (8, 'marry'))
In [11]: heappush(h, (4, 'kik'))
In [12]: heappop(h)
Out[12]: (3, 'fly')
我可以设计个小游戏,把每一节都设计的很碎,然后用以(难度,名称)存储。你可以随意玩,当让我推荐下一步,我就把难度最低的推荐给你。我这边很轻松的去重,也不用排序。
当设计一款智力游戏,是不是可以把获得胜利的可能性都以上述形式储存,然后当玩家希望提示,抛出一个来。
看看过几天是不是有时间,根据这个设计一个小算法出来。
——————————————————
github主页:https://github.com/gt11799
E-mail:[email protected]