Python heapq优先级队列Maxheap

2024-10-03 15:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法字符串aws元素排序队列时间指向
2条回答

将时间戳转换为最大时间戳的偏移量。然后,最近的时间戳将具有最小的键,这使得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

有几种方法可以做到这一点

一种是将日期/时间转换为序号,并将其取反

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

如果要保留原始日期字符串,请将此数字与日期字符串一起放入元组中

相关问题 更多 >