Python heapq:如何使用列表列表的第 n 个元素对堆进行排序?

2023-12-31

所以我有一些列表被添加到堆中;例如:

 n = [[1, 5, 93],
     [2, 6, 44],
     [4, 7, 45],
     [6, 3, 12]]

 heapq.heapify(n)
 print(n)

这将根据列表的第一个元素进行比较和排序。

我的问题是,如何对 heapq 进行排序,以便它比较每个列表的第三个元素?例如,可以按以下顺序从 heapq 访问上面的列表:

[[6, 3, 12],
 [2, 6, 44],
 [4, 7, 45],
 [1, 5, 93]]

heapq不支持key函数的顺序,因此您将需要操作您的数据结构。将您的列表映射到tuple(sort_value, list)会让你做log(n)推入和弹出:

 In []:
 q = [(x[2], x) for x in n]
 heapq.heapify(q)
 heapq.heappop(q)

 Out[]:
 (12, [6, 3, 12])

 In []:
 l = [2, 5, 1]
 heapq.heappush(q, (l[2], l))
 heapq.heappop(q)

 Out[]:
 (1, [2, 5, 1])

或者,定义您自己的list并实现该列表的比较函数:

class MyList(list):
    def __lt__(self, other):
        return self[2] < other[2]

q = [MyList(x) for x in n]

注意:您应该实现其他比较函数(请参阅functools.total_ordering关于如何轻松做到这一点)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python heapq:如何使用列表列表的第 n 个元素对堆进行排序? 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • JS insertBefore() 并传递一个包含 html 的字符串

    我正在寻找一种方法 如何在纯 JavaScript 中的元素之前插入内容 我有一个页脚元素 html
  • WordPress 和被动事件侦听器的最佳实践

    所以我在 Chrome 中对一个网站进行了审核 谷歌说我应该使用被动事件侦听器 我查看了代码并发现它来自 wordpress 表情符号集成
  • 如何在启动时运行 shell 脚本

    On an 亚马逊S3 https en wikipedia org wiki Amazon S3Linux 实例 我有两个名为start my app and stop my app启动和停止forever https www npmjs
  • 如何以编程方式打开 SearchView?

    ActionBar 有一个名为 SearchView 的小部件 不使用时 它看起来像这样 当它在使用时 它看起来像这样 我想 当然以编程方式 打开搜索视图 使其 使用中 我尝试了几个功能 例如 SearchView searchView S
  • 如何在 R 中复制月度周期图

    我想使用 R 和任何使其看起来不错的包输出一个与本页 右侧 所示的图表类似的图表 http processtrends com pg charts monthly cycle chart htm http processtrends com
  • 检索SQL语句的输出参数

    我正在使用一个有两列的表格 customer id and customer name customer name是一个简单的varchar customer id是一个自动递增的主键 我想使用我的 C 应用程序插入customer nam
  • 更改 BATCH 中的区域和语言选项

    如何使用批处理代码更改 Windows XP 和 7 中的区域和语言选项 我想使用 bat 文件将 标准和格式 更改为墨西哥西班牙语 这些设置位于注册表中HKCU Control Panel International 您可以使用 reg
  • ExtJS:在局部变量中获取代理帖子的响应

    我是 ExtJS 的新手 所以如果这是非常基本的 请原谅 我用谷歌搜索但找不到任何有用的答案 我有一个带有 AJAX 代理类型的商店 tableStore Ext create Ext data Store model TableData
  • 如何通过 IAM 控制用户对 Amazon DynamoDB 数据的访问?

    Does AWS 身份和访问管理 IAM http aws amazon com iam 提供一种方法 使用户只能编辑或删除某个项目中的项目亚马逊动态数据库 http aws amazon com dynamodb 他之前添加的表 AWS
  • Qt 的图表库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • SSIS - OLE DB 目标 - 表或视图加载与快速加载

    据我读到 表或视图数据访问模式将每一行作为一个事务一次提交 因此 制作一个传输 500 万行的包需要很长时间 30 分钟以上 快速加载数据访问模式允许在插入到目标时指定批处理行和提交大小 例如 插入 500 万条记录只需 2 分钟多一点 现
  • 如何在 ASP.NET MVC 中使用 Windows 语音合成器

    我尝试使用System Speech在 ASP NET mvc 应用程序中生成语音的类 HttpPost public ActionResult TTS string text SpeechSynthesizer speechSynthes
  • 用 OpenGL 绘制彩色网格?

    我的目标是能够创建所谓的占用网格 它类似于图块 网格游戏 看起来像附图 这是我正在从事的一个小型机器人项目 一切都是用 C C 完成的 所以我希望能够 更改分辨率或每个网格单元的大小 例如 1x1cm 或 5x5cm 等 根据某些标准更改每
  • 如何在 Sublime Text 3 中跳转到上一个和最后一个光标? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Sublime Text 中前后跳转光标位置历史记录 我用谷歌搜索了很多并发现缓冲区滚动 https github com tito
  • npm script 命令用于从另一个 package.json 运行脚本命令

    我有两个使用 npm 的独立项目 所以我都有 some base folder projectA package json and some base folder projectB package json 每个文件都有一个scripts
  • JSON 值不会插入到 ArrayList [重复]

    这个问题在这里已经有答案了 有人可以帮助我如何将 JSON 值添加到列表中吗 尽管放置了 List add 函数 但我似乎无法插入它 这是我第一次在 Android 中修改 JSON 的东西 我真的很感谢你的帮助 P S 不知何故 API
  • 使用 JInitator 在 Internet Explorer 8 中使用 Oracle Forms/Applications

    有人能够让运行 JInitator 的 Oracle Forms 在 Internet Explorer 8 中贷款吗 我尝试删除所有附加组件 各种版本的 Java 使用通配符将域添加到受信任的站点 并使用兼容模式 但均无济于事 我希望我们
  • ModelState.IsValid 还是 Model.IsValid?

    当我遇到两种方法 我认为同样有效 来做某事时 我正在编写一个控制器并为其进行单元测试 我的所有模型都有一个 IsValid 属性 我可以检查该属性以询问模型是否有效 在回发到控制器操作方法时 如果模型有效 我想保存 否则我想重新显示表单以供
  • Delphi 2007 和 {$IFDEF...} 指令,无法看到我们的条件

    我们的代码库中的组件文件中有以下内容 IFDEF ADO FDatabase TADODatabase ELSE FDatabase TODBCDatabase ENDIF 原因是 对于各种遗留应用程序 将使用一种或另一种类型的数据库连接和
  • Python heapq:如何使用列表列表的第 n 个元素对堆进行排序?

    所以我有一些列表被添加到堆中 例如 n 1 5 93 2 6 44 4 7 45 6 3 12 heapq heapify n print n 这将根据列表的第一个元素进行比较和排序 我的问题是 如何对 heapq 进行排序 以便它比较每个