Python|组合两个排序列表
很多时候我们遇到一个问题,我们希望使用归并排序的归并函数,这是一个经典的问题,在进行竞争性编程时经常出现。这种类型的问题,当已知更短和更紧凑的方法来执行它们时,总是非常方便。
让我们讨论在Python中组合两个排序列表的某些方法。
方法#1:朴素的方法
归并排序的归并操作可以使用前面也讨论过的朴素方法来执行。我们检查当前索引上两个元素中较小的一个,并增加其编号列表的索引。遇到。当其中一个列表用尽时,另一个列表将附加到合并列表的末尾。
# Python3 code to demonstrate
# to combine two sorted list
# using naive method
# initializing lists
test_list1 = [1, 5, 6, 9, 11]
test_list2 = [3, 4, 7, 8, 10]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using naive method
# to combine two sorted lists
size_1 = len(test_list1)
size_2 = len(test_list2)
res = []
i, j = 0, 0
while i < size_1 and j < size_2:
if test_list1[i] < test_list2[j]:
res.append(test_list1[i])
i += 1
else:
res.append(test_list2[j])
j += 1
res = res + test_list1[i:] + test_list2[j:]
# printing result
print ("The combined sorted list is : " + str(res))
输出:
The original list 1 is : [1, 5, 6, 9, 11]
The original list 2 is : [3, 4, 7, 8, 10]
The combined sorted list is : [1, 3, 4, 5, 6, 7, 8, 9, 10, 11]
方法 #2:使用sorted()
此函数可用于仅在 1 行中执行此任务,但在内部会花费更多时间。当我们将一个列表附加到另一个列表并再次对结果列表进行排序时,它可能具有更多的时间复杂度。如果我们需要节省编码时间,应该使用它。
# Python3 code to demonstrate
# to combine two sorted list
# using sorted()
# initializing lists
test_list1 = [1, 5, 6, 9, 11]
test_list2 = [3, 4, 7, 8, 10]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using sorted()
# to combine two sorted lists
res = sorted(test_list1 + test_list2)
# printing result
print ("The combined sorted list is : " + str(res))
输出:
The original list 1 is : [1, 5, 6, 9, 11]
The original list 2 is : [3, 4, 7, 8, 10]
The combined sorted list is : [1, 3, 4, 5, 6, 7, 8, 9, 10, 11]
方法#3:使用heapq.merge()
Python还提供了执行此特定任务的内置函数,并在后台执行与原始方法中的合并类似的工作,并且应该在想要处理此类问题时使用。
# Python3 code to demonstrate
# to combine two sorted list
# using heapq.merge()
from heapq import merge
# initializing lists
test_list1 = [1, 5, 6, 9, 11]
test_list2 = [3, 4, 7, 8, 10]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using heapq.merge()
# to combine two sorted lists
res = list(merge(test_list1, test_list2))
# printing result
print ("The combined sorted list is : " + str(res))
输出:
The original list 1 is : [1, 5, 6, 9, 11]
The original list 2 is : [3, 4, 7, 8, 10]
The combined sorted list is : [1, 3, 4, 5, 6, 7, 8, 9, 10, 11]