第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

用于在 Python 中構(gòu)建 PriorityQueue 的自定義比較器

用于在 Python 中構(gòu)建 PriorityQueue 的自定義比較器

米琪卡哇伊 2022-05-24 18:19:24
我正在嘗試在 Python 中使用 PriorityQueue 構(gòu)建優(yōu)先級隊(duì)列,但不是要考慮進(jìn)行優(yōu)先級比較的元素,而是希望它在將元素傳遞給函數(shù)后使用函數(shù)的返回值,類似于 sorted(mtlist,key = myfun),有沒有辦法做到這一點(diǎn),
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

與其將元素直接插入隊(duì)列,不如將每個(gè)元素包裝在一個(gè)元組中,其中元組中的第一個(gè)元素是所需的排序鍵。元組按其元素的順序排序(即,首先比較第一個(gè)元素),因此排序鍵需要排在第一位。


import heapq


queue = []

my_list = [...]

for element in my_list:

    heapq.heappush(queue, (my_func(element), element))


查看完整回答
反對 回復(fù) 2022-05-24
?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果您有元素的包裝類,那么您可以使用運(yùn)算符重載。


例如,假設(shè)您有一個(gè)CustomNumber類(相當(dāng)于您的元素),其中順序由模 16 值(私有函數(shù)__f())確定,您可以覆蓋比較運(yùn)算符,例如:


class CustomNumber:

    def __init__(self, value):

        self.value = value


    def __f(self, x):

        return x % 16


    def __lt__(self, obj):

        """self < obj."""

        return self.__f(self.value) < self.__f(obj.value)


    def __le__(self, obj):

        """self <= obj."""

        return self.__f(self.value) <= self.__f(obj.value)


    def __eq__(self, obj):

        """self == obj."""

        return self.__f(self.value) == self.__f(obj.value)


    def __ne__(self, obj):

        """self != obj."""

        return self.__f(self.value) != self.__f(obj.value)


    def __gt__(self, obj):

        """self > obj."""

        return self.__f(self.value) > self.__f(obj.value)


    def __ge__(self, obj):

        """self >= obj."""

        return self.__f(self.value) >= self.__f(obj.value)

這樣下面的代碼:


a = CustomNumber(16)

b = CustomNumber(14)


print('a < b =', a < b)

print('a <= b =', a <= b)

print('a == b =', a == b)

print('a != b =', a != b)

print('a > b =', a > b)

print('a >= b =', a >= b)

印刷:


a < b = True

a <= b = True

a == b = False

a != b = True

a > b = False

a >= b = False


查看完整回答
反對 回復(fù) 2022-05-24
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

Here is an example of using custom sort in PriorityQueue in Python.


We use a priority-queue (heapq) find the next element to add. To make the

implementation simple we "monkey patch" the ListNode class to have a custom

 less-than function using setattr. Note that, simply using the tuple trick 

 and pushing (node.val, node) to the priority queue will not work because 

 the lists have values in common.


class Solution:

    def mergeKLists(self, lists: List[ListNode]) -> ListNode:

    

    setattr(ListNode, "__lt__", lambda self, other: self.val <= other.val)

        

    pq = []

    for l in lists:

        if l:

            heapq.heappush(pq,  l)

    

    out = ListNode(None)

    head = out

    while pq:

        l = heapq.heappop(pq)

        head.next = l

        head = head.next

        if l and l.next:

            heapq.heappush( pq, l.next)

        

    return out.next


查看完整回答
反對 回復(fù) 2022-05-24
  • 3 回答
  • 0 關(guān)注
  • 541 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號