2016-07-24 127 views
-1

請參閱從這個網頁的解決方案4複製下面的代碼 - https://discuss.leetcode.com/topic/50450/slow-1-liner-to-fast-solutions/2heapq.merge默認密鑰?

streams = map(lambda u: ([u+v, u, v] for v in nums2), nums1) 
    stream = heapq.merge(*streams) 

nums2,nums1是號碼清單。

爲什麼heapq.merge默認排序在u + v的[u + v,u,v]列表中?每個生成器中的不同列表中的u + v確實是按照排序順序的(因爲nums2和nums1按升序排列),但我不明白heap.merge()知道如何在u + v上合併,第一個元素len(nums1)生成器中的列表。

回答

1

它不僅僅是在u+v排序,它是在整個[u+v, u, v]列表排序。 Python比較兩個有序集合的標準方式是通過比較相應的元素,從最低索引處開始,直到一對相應元素不相等。如果一個序列比另一個序列短,而較長的序列由具有額外元素的較小序列組成,則較長的序列被認爲是較大的。

這就是比較一對字符串,元組或列表時發生的情況。你應該確保自己的自定義集合對象的行爲方式相同。

這種行爲在進行復雜排序時非常方便,因爲您只需要在key函數中創建適當的元組,並將其傳遞給.sortsorted。有一些例子在Sort a list by multiple attributes?