具有可定制密钥的小型堆实现

PyHeap的Python项目详细描述


  • 使用任意键进行排序的堆的简单实现。在
  • 默认情况下,堆是最小堆。(可以通过在构造函数中设置isMin=False)进行更改

用法示例:

fromPyHeapimportHeap# instantiate an empty heap as follows# insert elements using the insert methodheap=Heap()foriinrange(5):heap.insert(i)print(heap.heap)# [0. 0, 1, 2, 3, 4]# instantiate a heap with a predefined array or seta=[iforiinrange(5)]heap=Heap(a)print(heap.heap)# [0. 0, 1, 2, 3, 4]

您可以执行常见的堆操作,如insertgetMin/deleteMin

^{pr2}$

还可以删除堆中存在的任意值:

val=heap.deleteVal(3)

也可以对堆进行迭代:

  • 如果是minHeap,则迭代顺序从最小到最大;如果是maxHeap,则迭代顺序从大到小
forvalinheap:print(val)

还可以对堆进行索引:

  • 在本例中,heap[0]返回最小的数字,heap[k]返回第k个最小值

最后,堆支持添加任何类型的类型,只要您提供一个key来提供一个排序值的方法。在

  • 注意:默认情况下,如果对象不可索引,则键是一个标识函数。在
  • 否则,它是对象的第一个元素。例如列表x的x[0]
  • 如果键在某个项上失败,它将引发一个ValueError
test=[((3,4),2.8284271247461903),((8,9),9.899494936611665),((10,2),9.0),((0.1,2),0.9),((10,5),9.486832980505138)]heap=Heap(test,key=lambdax:x[1])# this will order by the second value# you can change the heaps key as follows (this will change the heap)heap.reconstructHeap(lambdax:1/(x+1))# outside of the heap, you can get access to the heap's key as folows:heap.applyKey(3)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?