赞
踩
- >> import heapq
- >>> nums=[1,8,2,23,7,-4,18,23,42,37,2]
- >>> print(heapq.nlargest(3,nums))
- [42, 37, 23]
- >>> print(heapq.nsmallest(3,nums))
- [-4, 1, 2]
- heap=list(nums)
- >>>heapq.heapify(nums)#将列表原地转换成堆
- >>> nums
- [-4, 2, 1, 23, 7, 2, 18, 23, 42, 37, 8]
-
- heapq.heappop(nums) #轻松的找到最小的元素
- from heapq import *
- import heapq #载入heap库,heap指的是最小堆
- heapq.heappush(heap, item): 将 item 的值加入 heap 中,保持堆的不变性。
-
- heapq.heappop(heap):弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 使用 heap[0] ,可以只访问最小的元素而不弹出它。
- heapq.heappushpop(heap, item):将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率。
- heapq.heapify(x) #使数组转化为堆** ,原地,线性时间内。
- heapq.heapreplace(heap, item):弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。先弹出再推入,heappushpop是先推入在弹出最小
-
- ##### 堆元素item可以为元组
- Python3以后的版本中,如果元组(priority,task)priority是一样的,而且task没有一个默认的比较参照值,那这样我们其实是没有办法来比较的。
- 我们可以采用三元数组的方法。设置一个优先级,一个条目值,一个任务值。 有相同优先级的时候,因为条目值不一样可以帮助cpu来裁决它们被加载的顺序
- ##### 方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。