使用heapq在Python中合并两个排序的数组?

在本节中,我们将看到如何使用Python中的heapq模块合并两个排序的列表。例如,如果list1 = [10,20,30,40]并且list2 = [100,200,300,400,500],则合并后将返回list3 = [10,20,30,40,100, 200、300、400、500]

为了执行此任务,我们将使用heapq模块。该模块随附Python作为标准库模块。因此,我们需要在使用它之前将其导入。

import heapq

heapq模块具有一些属性。这些如下-

方法heapq.heapify(iterable)

它用于将可迭代的数据集转换为堆数据结构。

方法heapq.heappush(heap,element)

此方法用于将元素插入堆中。之后,重新堆放整个堆结构。

方法heapq.heappop(heap)

此方法用于从堆顶部返回和删除元素,并对其余元素执行heapify。

方法heapq.heappushpop(heap,element)

此方法用于在一个语句中插入和弹出元素。

方法heapq.heapreplace(heap,element)

此方法用于在一个语句中插入和弹出元素。它从堆的根中删除元素,然后将元素插入堆中。

方法heapq.nlargest(n,可迭代,键=无)

此方法用于从堆中返回n个最大的元素。

方法heapq.nsmallest(n,可迭代,键=无)

此方法用于从堆中返回n个最小的元素。

范例程式码

import heapq
first_list = [45, 12, 63, 95, 74, 21, 20, 15, 36]
second_list = [42, 13, 69, 54, 15]

first_list = sorted(first_list)
second_list = sorted(second_list)

print('First sorted list: ' + str(first_list))
print('Second sorted list: ' + str(second_list))

final_list = list(heapq.merge(first_list, second_list))
print('The final list: ' + str(final_list))

输出结果

First sorted list: [12, 15, 20, 21, 36, 45, 63, 74, 95]
Second sorted list: [13, 15, 42, 54, 69]
The final list: [12, 13, 15, 15, 20, 21, 36, 42, 45, 54, 63, 69, 74, 95]