簡體   English   中英

Python heapq 優先級隊列 Maxheap

[英]Python heapq Priority Queue Maxheap

我知道使用 heapq 的優先級隊列是作為 minheap 實現的。 我需要將優先級隊列實現為 maxheap,它按 AWS 日期時間字符串對元素進行排序。 當我調用 heapq.heappop() 方法時,我希望具有最新日期時間的元素首先從隊列中彈出。 網上的一切似乎都指向僅使用 minheap,但在輸入期間使您的值變為負值,以便將更大的值推到頂部而不是底部。 但是,我似乎找不到任何方法將其實際應用於日期時間字符串,例如“2021-06-03T16:11:14.206650Z”。 有沒有一種方法可以使該字符串成為“負數”或以某種方式使它成為較新的日期首先從堆中彈出?

有幾種方法可以解決這個問題。

一種是將日期/時間轉換為序數,然后取反

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

如果要保留原始日期字符串,則將此數字與日期字符串一起放在一個元組中。

將您的時間戳轉換為最大時間戳的偏移量。 然后最近的時間戳將具有最小的鍵,使最小堆合適。

請注意, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM