请参阅从本页的解决方案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上合并。在
它不仅对
u+v
排序,而且对整个[u+v, u, v]
列表进行排序。Python比较两个有序集合的标准方法是比较相应的元素,从最低的索引开始,一直到一对对应的元素不等。如果一个序列比另一个序列短,并且长序列由较小的序列和额外的元素组成,则长序列被认为是较大的序列。在所以当你比较一对字符串、元组或列表时会发生这种情况。并且您应该确保您自己的自定义集合对象的行为方式相同。在
在进行复杂排序时,这种行为非常方便,因为您只需要在传递给}的
.sort
或{key
函数中创建一个适当的元组。{这里有一些例子。在相关问题 更多 >
编程相关推荐