Python堆排序模块 heapq

主要参考的是Github上的一个项目:https://github.com/jackfrued/Python-100-Days
文章主要是对该项目中的内容进行学习 穿插一点自己的学习想法等内容~

堆排序科普

上一次听到这个词语还是自己看《我的第一本算法书》的时候嘞

那首先介绍一下什么是堆排序
堆排序的特点是利用了数据结构中的堆结构。

堆是一种图的树形结构,被用于实现“优先队列”。优先队列是一种数据结构,可以自由添加数据,但取出数据是要从最小值开始按顺序取出。

总结来说就是,堆的类型就是最小的元素位于树的顶端(优先队列的一种)自由添加数据,取的时候从小到大取出【比上比下 找到自己合适的位置】
将数据存储为堆结构时,遵循先往左边挂的原则。

代码介绍

"""
从列表中找出最大的或最小的N个元素
堆结构(大根堆/小根堆)
"""
import heapq

list1 = [34, 25, 12, 99, 87, 63, 58, 78, 88, 92]
list2 = [
    {'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(heapq.nlargest(3, list1))
print(heapq.nsmallest(3, list1))
print(heapq.nlargest(2, list2, key=lambda x: x['price']))
print(heapq.nlargest(2, list2, key=lambda x: x['shares']))

总结

从代码运行来看,很好用的样子。大家用起来哇

posted @ 2021-07-31 19:59  芋圆院长  阅读(117)  评论(0编辑  收藏  举报