heapq.合并默认键?

2024-04-24 10:37:25 发布

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

请参阅从本页的解决方案4复制的以下代码-https://discuss.leetcode.com/topic/50450/slow-1-liner-to-fast-solutions/2

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

nums2,nums1是数字列表。在

为什么heapq.合并默认情况下按[u+v,u,v]列表的u+v排序?每个生成器中不同列表中的u+v确实是按排序顺序排列的(因为nums2和nums1是按升序排列的),但是我不知道堆.合并()知道在len(nums1)生成器中列表的第一个元素u+v上合并。在


Tags: 代码httpscom列表topic排序请参阅解决方案
1条回答
网友
1楼 · 发布于 2024-04-24 10:37:25

它不仅对u+v排序,而且对整个[u+v, u, v]列表进行排序。Python比较两个有序集合的标准方法是比较相应的元素,从最低的索引开始,一直到一对对应的元素不等。如果一个序列比另一个序列短,并且长序列由较小的序列和额外的元素组成,则长序列被认为是较大的序列。在

所以当你比较一对字符串、元组或列表时会发生这种情况。并且您应该确保您自己的自定义集合对象的行为方式相同。在

在进行复杂排序时,这种行为非常方便,因为您只需要在传递给.sort或{}的key函数中创建一个适当的元组。{这里有一些例子。在

相关问题 更多 >