当前位置: 首页 > article >正文

heapq模块常用方法

heapq.heapify(x)

import heapq

# heapq.heapify(x)将列表x转换为堆
# 在堆数据结构中,最小元素总是位于根节点(索引为 0)
# 这个操作是在原列表上进行的,会改变列表的顺序
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
heapq.heapify(my_list)
print(my_list)
# output:[1, 1, 2, 3, 3, 9, 4, 6, 5, 5, 5]

heapq.heappush(heap, item)

import heapq

# 将item添加到heap堆中
# 这个操作会维护堆的性质,即将新元素插入到合适的位置,以保证堆的有序性。
my_heap = []
heapq.heappush(my_heap, 3)
heapq.heappush(my_heap, 1)
heapq.heappush(my_heap, 4)
print(my_heap)  # output:[1, 3, 4]

heapq.heappop(heap)

import heapq

# 从heap堆中弹出并返回最小的元素
# 这个操作会重新调整堆,使得剩余元素仍然保持堆的性质
my_heap = [1, 3, 4]
min_item = heapq.heappop(my_heap)
print(min_item)  # output:1
print(my_heap)  # output:[3, 4]

heapq.heapreplace(heap, item)

import heapq

# 弹出并返回堆中的最小元素,然后将item插入堆中
# 这个操作比先调用heappop()然后再调用heappush()稍微高效一些
# 因为它可以在一次操作中完成这两个步骤
my_heap = [1, 3, 4]
new_item = 0
replaced_item = heapq.heapreplace(my_heap, new_item)
print(replaced_item)  # output:1
print(my_heap)  # output:[0, 3, 4]

heapq.nlargest(n, iterable, key=None)

import heapq

# 从iterable可迭代对象中返回最大的n个元素
# 如果提供了key参数,它应该是一个接受一个参数的函数,用于从每个元素中提取比较键
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
largest_3 = heapq.nlargest(3, my_list)
print(largest_3)

students = [
    {'name': 'Alice', 'score': 85},
    {'name': 'Bob', 'score': 92},
    {'name': 'Charlie', 'score': 78},
    {'name': 'David', 'score': 90}
]
top_two_students = heapq.nlargest(2, students, key=lambda s: s['score'])
print(top_two_students)  # output:[9, 6, 5]

heapq.nsmallest(n, iterable, key=None)

import heapq

# 从iterable可迭代对象中返回最小的n个元素
# 和nlargest类似,如果有key参数,则用于提取比较键
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
smallest_3 = heapq.nsmallest(3, my_list)
print(smallest_3)
# output:[{'name': 'Bob', 'score': 92}, {'name': 'David', 'score': 90}]

nums = [4, 2, 7, 1]
result = heapq.nsmallest(2, nums)
print(result)  # output:[1, 1, 2]

http://www.kler.cn/a/414859.html

相关文章:

  • 搭建文件服务器并使用Qt实现文件上传和下载(带账号和密码)
  • jenkins 2.346.1最后一个支持java8的版本搭建
  • 屏幕分辨率|尺寸|颜色深度指纹修改
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】
  • redis大key和热key
  • Hbase2.2.7集群部署
  • Qt常用控件之显示类控件
  • go语言去除字符串末尾的特定字符
  • Java项目实战II基于SPringBoot的玩具销售商城管理系统(开发文档+数据库+源码)
  • Ajax入门程序
  • Python基础学习-12匿名函数lambda和map、filter
  • 【数据分析】一、pandas数据处理指南:100个基于pandas数据预处理方法
  • Leetcode494. 目标和(HOT100)
  • 【已解决】git push需要输入用户名和密码问题
  • MySQL:常用数据类型
  • 【数据结构】ArrayList与顺序表
  • # 18_ Python基础到实战一飞冲天(二)-python基础(十八)--元组
  • 尚硅谷学习笔记——Java设计模式(一)设计模式七大原则
  • mac 如何查看 export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 是否正确
  • Modern Effective C++ item 15:尽可能的使用constexpr
  • 【GIT】TortoiseGit的拉取(Pull) 和 获取(Fetch)
  • 机器学习在教育方面的应用文献综述
  • windows server 2019 启动 nginx 报错
  • 如何在AWS中部署HOOPS Communicator?Docker容器化策略!
  • 深度学习-46-大语言模型LLM之仅需一个文件llamafile部署本地大模型
  • 【C++】入门【三】