文档章节

heapq( Heap queue algorithm)

我是菜鸟我骄傲
 我是菜鸟我骄傲
发布于 2017/09/06 18:07
字数 501
阅读 9
收藏 0

heapq( Heap queue algorithm)库

从集合中取前n个最大,或最小的值

nlargest(n,iterable)前n个最大的,nsmallest(n,iterable)前n个最小的

import heapq

nums=[1,23,32,45,67,21,78,12]

print("3 largest",heapq.nlargest(3,nums))
print("3 smallest",heapq.nsmallest(3,nums))
3 largest [78, 67, 45]
3 smallest [1, 12, 21]

从字典中取前n个最大,或最小的值

nlargest(n,dicts,key)按照key取前n个最大的,nsmallest(n,dicts,key)按照key取前n个最小的

dicts=[
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]

print("2 largest",heapq.nlargest(2,dicts,key=lambda s:s['price']))
print("2 smallest",heapq.nsmallest(2,dicts,key=lambda s:s['price']))
2 largest [{'name': 'AAPL', 'price': 543.22, 'shares': 50}, {'name': 'ACME', 'price': 115.65, 'shares': 75}]
2 smallest [{'name': 'YHOO', 'price': 16.35, 'shares': 45}, {'name': 'FB', 'price': 21.09, 'shares': 200}]

heapify(X),将list X转换为堆

print("heap before:",nums)
heapq.heapify(nums)
print("heap after:",nums)
heap before: [1, 23, 32, 45, 67, 21, 78, 12]
heap after: [1, 12, 21, 23, 67, 32, 78, 45]

heappush(heap, item)

往堆里push一个元素

heapq.heappush(nums,10)

print("push 10 :",nums)
push 10 : [1, 10, 21, 12, 67, 32, 78, 45, 23]

heappop(heap)

从堆中pop一个最小的值,并从堆中移除这个值, 如果heap为空,抛出异常:IndexError: index out of range

smallest = heapq.heappop(nums)
print(smallest)
print("pop after:",nums)
#smallest = heapq.heappop([])
1
pop after: [10, 12, 21, 23, 67, 32, 78, 45]

heappushpop(heap, item)

push一个元素 , 然后pop一个最小的元素,类似与先调用一个 heappush() 然后再调用一个heappop方法

smallest = heapq.heappushpop(nums,100)
print("heappushpop 100, ",smallest)

###push一个最小的值,
smallest = heapq.heappushpop(nums,1)
print("heappushpop smallest value 1 and then return :",smallest)
heappushpop 100,  10
heappushpop smallest value 1 and then return : 1

heapreplace(heap, item)

先pop最小的值,然后再push item,如果heap为空,抛出异常:IndexError: index out of range

smallest = heapq.heapreplace(nums,1)
print("heapreplace smallest value 1 and then return :",smallest)

heapreplace smallest value 1 and then return : 12

merge(*iterables, key=None, reverse=False)

合并多个集合,返回堆排序后的数据,类型为 iterator


newheap = heapq.merge(nums,[10,11,23])
print(newheap)

for item in newheap:
    print(item)

<generator object merge at 0x0000000004EB4AF0>
1
10
11
23
21
23
45
67
32
78
100

© 著作权归作者所有

共有 人打赏支持
我是菜鸟我骄傲
粉丝 12
博文 216
码字总数 137891
作品 0
西安
架构师
heapq取列表最大或最小值元素

在一个集合中获取最大或者最小的n个元素,这时候就可以使用heapq模块中有nlargest和nsmallest函数可以达到需求 heapq介绍: heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实...

梧桐0928
06/26
0
0
1.4 查找N项中的最大最小值

问题: 你想获取一个关于给定集合中最大最小值的列表 解法: heapq模块 有两个方法 nlargest() 和 nsmallest()方法,它们正是你所需的~!(撒花) >>> import heapq>>> nums = [1, 8, 2, 23,...

Marmot_Alex
2014/05/10
0
0
Oversea company interview question.

network, web, database, Linux system Interview Questions Given a list of numbers, find a fastest sort algorithm Describe TCP hand shake process Describe DB master-slave process ......

陈昊Sevens
2016/08/23
18
0
Python中的高级数据结构

数据结构 数据结构的概念很好理解,就是用来将数据组织在一起的结构。换句话说,数据结构是用来存储一系列关联数据的东西。在Python中有四种内建的数据结构,分别是List、Tuple、Dictionary以...

好铁
2016/02/11
116
0
数据结构-05-队列(Queue)

Queue - 队列 Queue 是一个 FIFO(先进先出)的数据结构,并发中使用较多,可以安全地将对象从一个任务传给另一个任务。 Queue 和 Stack 在 Python 中都是有 list ,[] 实现的。 在python 中l...

Corwien
2016/06/17
17
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jetbrains系产品IDEA:mac上面提示快捷键设置

原因 由于Mac上面的Ctrl+空格变成输入法切换的快捷键,在使用IDEA的过程中,代码提示很不方便,需要使用option+/这种传统eclipse上面的代码提示快捷键作为主要快捷键。 怎么修改? 移除【opt...

亚林瓜子
30分钟前
0
0
Exclipse 输出结果时换行

System.out.println(f1 + "\n" + d1 + "\n" + d2);

笑丶笑
30分钟前
1
0
怎样治疗标签不能触发onblur事件

I realize this was over a year ago, but it showed up for me in Google while trying to solve this same issue. It seems Chrome does not consider some elements, like body and ancho......

Weijuer
34分钟前
0
0
vue常见库安装

移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。 安装fastclick npm insta...

林夏夕
36分钟前
0
0
kafka 教程(三) kafka Java API 编程

下午写

MrPei
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部