使用queue.PriorityQueue,不关心比较

2023-12-11

我正在尝试使用queue.PriorityQueue在 Python 3(.6) 中。

我想存储具有给定优先级的对象。但如果两个对象具有相同的优先级,我不介意PriorityQueue.get返回任一。换句话说,我的对象不能在整数上进行比较,允许它们进行比较是没有意义的,我只关心优先级。

In Python 3.7 的文档,有一个解决方案涉及dataclasses。我引用:

如果数据元素不可比较,则可以将数据包装在忽略数据项并仅比较优先级编号的类中:

from dataclasses import dataclass, field
from typing import Any

@dataclass(order=True)
class PrioritizedItem:
    priority: int
    item: Any=field(compare=False)

唉,我用的是Python 3.6。在该版本Python的文档,没有评论使用PriorityQueue对于优先级,不关心“对象价值”,这在我的情况下是不合逻辑的。

有没有比定义更好的方法__le__以及我的自定义类上的其他比较方法?我发现这个解决方案特别丑陋且违反直觉,但这可能就是我。


dataclasses只是一种避免创建大量样板代码的便捷方法。

你实际上并不have创建一个类。也具有唯一计数器值的元组:

from itertools import count

unique = count()

q.put((priority, next(unique), item))

以便同等优先级之间的联系被后面的整数打破;因为它总是独一无二的item价值从不被咨询。

您还可以使用直接丰富的比较方法创建一个类,使用以下方法可以更简单@functools.total_ordering:

from functools import total_ordering

@total_ordering
class PrioritizedItem:
    def __init__(self, priority, item):
        self.priority = priority
        self.item = item

    def __eq__(self, other):
        if not isinstance(other, __class__):
            return NotImplemented
        return self.priority == other.priority

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

使用queue.PriorityQueue,不关心比较 的相关文章

随机推荐

  • 嵌套 .pth 文件或从网络加载额外的站点目录

    目标是拥有一个通用目录 我可以在其中添加网络上的包 这些包会自动添加到sys path无需运行site addsitedir or sys path append每次我导入所述包时 有没有办法做到这一点 背景 我有一个小型用户网络 他们都需
  • 更改后无法保存 Jenkins 作业,没有可见错误

    前提 詹金斯 2 277 4Ubuntu 20 04 2 LTSopenjdk版本 11 0 11 2021 04 20 Problem 我有一份自由式工作 第一次保存所有已完成的更改 此时 保存 和 应用 按钮位于页面中底部 下次如果我进
  • NOPL在x86系统中做什么?

    NOPL在x86机器中的作用是什么 感觉好像什么也没做 但是为什么总是在汇编代码中呢 NOP是一个单字节 不执行任何操作 的操作 实际上是 无操作 NOPW NOPL 等相当于什么都不做 但会占用字和长字节 e g NOP 1byte op
  • 为什么/哪里出现错误“ 调用方法 Location.toString 的权限被拒绝”

    EDIT 我在回复评论时添加了澄清 在可能且有意义的地方 这些添加的修饰位于斜体字体样式 我已经在 Firefox 群组以及 SO 上发布了这个问题 关于 SO 至少有 25 个相关问题 其中一些代表性问题是 闪虫 跨域问题 只是一个谜 F
  • HTML / VBA 下拉菜单

    我在 VBA 和 HTML 例程方面遇到了一些问题 我必须从链接中选择https www betexplorer com next soccer 排序依据 下拉菜单并选择 联赛 项 我无法通过 VBA 执行此操作 这是我写的代码 Sub S
  • Python:哪个命令会增加 Windows 上打开文件的数量?

    关于这个主题似乎有很多问题 我似乎找不到我应该在 python 脚本中调用什么来增加打开文件限制 我知道我需要使用 setmaxstdio在 C 级别 但我不知道如何在 python 中调用它 有任何想法吗 尝试使用win32file fr
  • BSL(如何设计程序):如何将代码从单独的文件导入到定义区域?

    我对 BSL 有疑问 我想将我的代码分成单独的辅助文件并使用 require auxiliary function rkt 首先将分离的代码导入到定义区域 然而它并没有像想象的那样工作 虽然没有给出明确的错误 但似乎 DrRacket 根本
  • phpMailer gmail 垃圾邮件

    我使用 phpMailer 但有一个问题 当收件人是 Gmail 或 Yahoo 时 我的电子邮件最终会进入垃圾邮件文件夹 这怎么可能 代码是这样的 mail gt AddCustomHeader Reply to email protec
  • 获取数组中所有项目的密集排名和间隙排名

    我想使用 PHP 计算并存储数组中所有条目的密集排名和间隙排名 我想在 PHP 中执行此操作 而不是 MySQL 因为我每周处理 100 000 到 900 个组合的动态组合 这就是为什么我不能使用 MySQL 制作那么多表 我查找密集排名
  • 如何在matlab中对多张图像进行平均?

    我正在尝试从 1000 帧中获取平均图像 每个图像的大小为 512 x 512 像素 我从实验中获得的文件是 tiff 单元 16 数据 tiff 文件包含同一地点的 1000 帧 我正在考虑编写一个 m 文件 从 tiff 文件中读出 1
  • Shell 函数返回值不大于 255

    sum return 1 2 read a b sum a b echo 当我们传递 a 255 和 b 36 的值时 ans 将为 35 为什么 您要求 shell 返回该值 返回值不能大于 255 所以当你添加 a 255 和 b 36
  • java泛型加法

    我正在尝试实现提到的添加方法在通用稀疏矩阵加法问题中 class Matrix
  • MySQL 尝试截断表时出错

    我在截断 MySQL Server 5 5 上的表时遇到问题 我尝试截断的表有一列充当另一个表中的外键 The CREATE TABLE涉及的两个表如下 CREATE TABLE tbluser id int 11 NOT NULL AUT
  • 默认值、值和零初始化混乱

    我对值初始化 默认初始化和零初始化感到非常困惑 尤其是当他们针对不同的标准时C 03 and C 11 and C 14 我正在引用并试图扩展一个非常好的答案值 默认 零 初始化C 98 and C 03在这里使其更加通用 因为如果有人可以
  • Matlab互相关与相关系数问题

    我正在用 C 编写一个程序 但使用来自 matlab 的涉及互相关的数据 据我所知 当我对两组数据进行相关时 它会给出一个相关系数数字 表明它们是否相关 但我想使用互相关数据系列 当我在 Matlab 上运行互相关时 它给了我很多数据 绘制
  • 如何从Oracle中的正则表达式中提取组?

    我收到这个查询并想要提取括号之间的值 select de desc regexp substr de desc 1 from DATABASE where col name like 然而 它给了我带有括号的值 例如 TEST 我只想 测试
  • JavaScript 中的可变变量

    据我所知 这个功能在PHP中已经存在 让我们看一下下面的 php 代码 color red color dark 功能描述 有时拥有可变的变量名会很方便 即 可以动态设置和使用的变量名 变量变量采用变量的值并将其视为变量的名称 在上面的例子
  • Matplotlib 表面颜色不纯色

    在 Matplotlib 中绘制平面时 我没有得到纯色 我得到以下带有多种红色阴影的结果 我在 Python 3 5 2 中使用 Matplotlib 版本 1 5 1 我正在运行的代码如下 import numpy as np from
  • 无法使用 PHP $_POST[] 变量检索 jQuery 序列化表单数据

    使用 Ajax jQuery 函数 post 我正在发送 jQueryserialized 将数据表单数据发送到 PHP 函数 该函数成功接收它 POST 但又个性 POST form field 变量为空 在我的 PHP 函数中 prin
  • 使用queue.PriorityQueue,不关心比较

    我正在尝试使用queue PriorityQueue在 Python 3 6 中 我想存储具有给定优先级的对象 但如果两个对象具有相同的优先级 我不介意PriorityQueue get返回任一 换句话说 我的对象不能在整数上进行比较 允许