微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python heapq 优先队列 Maxheap

如何解决Python heapq 优先队列 Maxheap

我知道使用 heapq 的优先级队列是作为 minheap 实现的。我需要将优先级队列实现为按 AWS 日期时间字符串对元素进行排序的 maxheap。我希望在调用 heapq.heappop() 方法时首先从队列中弹出具有最新日期时间的元素。网上的一切似乎都指向只使用 minheap 但在输入过程中使您的值为负,以便将更大的值推到顶部而不是底部。但是,我似乎找不到任何方法将其实际应用于像这样的“2021-06-03T16:11:14.206650Z”这样的日期时间字符串。有没有办法可以使该字符串为“负数”或以某种方式使其首先从堆中弹出最近的日期?

解决方法

有几种方法可以解决这个问题。

一种是将日期/时间转换为序数,然后否定

-dateutil.parser.parse('2021-06-03T16:11:14.206650Z').toordinal()

如果你想保留原来的日期字符串,那么把这个数字和日期字符串放在一个元组中。

,

将您的时间戳转换为最大时间戳的偏移量。然后最近的时间戳将具有最小的键,从而使 minheap 合适。

请注意,dateutil 是第三方模块。

>>> import datetime,dateutil
>>> now = datetime.datetime.now().timestamp()
>>> june3 = dateutil.parser.isoparse('2021-06-03T16:11:14.206650Z').timestamp()
>>> june1 = dateutil.parser.isoparse('2021-06-01T00:00:00Z').timestamp()
>>> now - june3 < now - june1
True

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。