堆排序heapq的用法

基本用法:

复杂数据结构:

# coding=utf-
# example.py
# Example of using heapq to find the N smallest or largest items
import heapq
portfolio = [
{'name': 'IBM', 'shares': , 'price': 91.1},
{'name': 'AAPL', 'shares': , 'price': 543.22},
{'name': 'FB', 'shares': , 'price': 21.09},
{'name': 'HPQ', 'shares': , 'price': 31.75},
{'name': 'YHOO', 'shares': , 'price': 16.35},
{'name': 'ACME', 'shares': , 'price': 115.65}
]
cheap = heapq.nsmallest(, portfolio, key=lambda s: s['price']) #对price进行排序
expensive = heapq.nlargest(, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)

输出结果:

H:\Python27_64\python.exe H:/myfile/python-cookbook-master/src//finding_the_largest_or_smallest_n_items/example.py
[{'price': 16.35, 'name': 'YHOO', 'shares': }, {'price': 21.09, 'name': 'FB', 'shares': }, {'price': 31.75, 'name': 'HPQ', 'shares': }]
[{'price': 543.22, 'name': 'AAPL', 'shares': }, {'price': 115.65, 'name': 'ACME', 'shares': }, {'price': 91.1, 'name': 'IBM', 'shares': }] 进程已结束,退出代码0

列出一些常见的用法:

heap = []#建立一个常见的堆

heappush(heap,item)#往堆中插入一条新的值

item = heappop(heap)#弹出最小的值

item = heap[0]#查看堆中最小的值,不弹出

heapify(x)#以线性时间将一个列表转为堆

item = heapreplace(heap,item)#弹出一个最小的值,然后将item插入到堆当中。堆的整体的结构不会发生改变。
heappoppush()#弹出最小的值,并且将新的值插入其中

merge()#将多个堆进行合并

nlargest(n , iterbale, key=None)从堆中找出做大的N个数,key的作用和sorted( )方法里面的key类似,用列表元素的某个属性和函数作为关键字

实验:

a=range(,,-)
print a
[, , , , ]
print heapq.nlargest(,a)
[, , ]
heapq.heapify(a)
print a,a[]
[, , , , ]
print heapq.heappop(a),heapq.heappop(a) print a,'>>>'
[, , ] >>>
heapq.heappush(a,)      #直接放在堆的最后
print a
[, , , ]
heapq.heapreplace(a,7.5) #删一个左边的,item插进去
print a
[, 7.5, , ]
heapq.heappushpop(a,8.5) #删一个左边的,item插最后
print a
[7.5, , , 8.5]
a.sort()
print a
[7.5, , 8.5, ]
print a[]
#多个堆进行合并

b=range(,)
heapq.heapify(b)
c=range(,)
c.append([,])
print c
[, , , [, ]] heapq.heapify(c)
print c
[, , , [, ]] print list(heapq.merge(b,c))
[, , , , , , [, ]]

找到最大或最小的N个元素---heapq模块的更多相关文章

  1. 找到最大或最小的N个元素

    问题: 想在某个集合中找到最大或最小的N个元素 解决方案: heapq 模块中有两个函数  nlargest() 和 nsmallest()  它们正是我们需要的.例如: import heapq n ...

  2. 【python cookbook】【数据结构与算法】4.找到最大或最小的N个元素

    问题:想在某个集合中找出最大或最小的N个元素 解决方案:heapq模块中的nlargest()和nsmallest()两个函数正是我们需要的. >>> import heapq &g ...

  3. 找到最大或者最小的N个元素

    heapq模块中的两个函数nlargest()和nsmallest() import heapq nums = [1,5,6,458,6,787,5,45,6] print(heapq.nlarges ...

  4. 【编程题目】查找最小的 k 个元素

    5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学 ...

  5. 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。

    看完两个求最大值算法之后的一些感想. 如果想直接看算法的可以跳过.但是我觉得我这些想法还是比较有用的,至少对我将来的算法设计是这样的. 算法的功能越强大,必然意味着速度慢,因为根据丛林法则,那种慢又功 ...

  6. python中使用heapq查看最大与最小的N个元素列表

    怎么从一个集合中获取最大或最小的N个元素列表? heapq模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题. In [39]: import heapq In [ ...

  7. 查找最小的k 个元素之C#算法实现

    紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...

  8. 查找最小的K个元素,使用最大堆。

    查找最小的K个元素,使用最大堆,具体代码如下: #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace st ...

  9. 笔试题&amp;面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素

    设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...

随机推荐

  1. 【OpenCV】SIFT原理与源码分析

    SIFT简介 Scale Invariant Feature Transform,尺度不变特征变换匹配算法,是由David G. Lowe在1999年(<Object Recognition f ...

  2. sloop公共函数之添加信号,定时器及socket

    1:添加信号 1.1 原型:sloop_handle sloop_register_signal(int sig, sloop_signal_handler handler, void * param ...

  3. Libevent学习笔记(五) 根据例子学习bufferevent

    libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的. 这个例子在Sample中 这个例子之前讲解过,这次主要看下buf ...

  4. nginx日志增加cookie信息

    一.获取全部cookie信息 这个比较方便,直接在nginx.conf文件中添加$http_cookie log_format main '[$time_local] - $remote_addr:$ ...

  5. 第3章-Vue.js 指令扩展 和 todoList练习

    一.学习目标 了解Vue.js指令的实现原理 理解v-model指令的高级用法 能够使用Vue.js 指令完成 todoList 练习(重点+难点) 二.todoList练习效果展示 2.1.效果图展 ...

  6. MySQL建表时列名同保留字重复问题解决办法

    建表时遇到遇到属性名同MySQL的保留字相同导致不能建表的问题,如下SQL语句: CREATE TABLE TBL_ACCOUNT_FROZEN_RECORD ( ID BIGINT NOT NULL ...

  7. ZOJ 3781 Paint the Grid Reloaded 连通块

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 题意:n*m只由OX组成的矩阵,可以选择某一连通块变成另一 ...

  8. 在vm上面安装Linux系统

    1 在vm上面安装Linux系统 1  以管理员的身份运行VMware:  点击VM图标然后右键属性 ,点兼容性 ---特权 等级 选择 以管理员的身份运行此软件          2 . 添加一个虚 ...

  9. JAVA中反射机制六(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  10. 修复 Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.8:add-source (execution: add-source, phase: generate-sources)

    在maven项目中使用add-source时,pom.xml报如下错误: Plugin execution not covered by lifecycle configuration: org.co ...