在Python中合并两个列表并排序的方法主要有以下四种,涵盖不同场景和效率需求:
一、使用 +
运算符合并后排序
这是最直观的方法,适用于内存充足且无需保留原列表的场景。
list1 = [1, 3, 5]
list2 = [2, 4, 6]
merged_list = list1 + list2
merged_list.sort()
print(merged_list) # 输出: [1, 2, 3, 4, 5, 6]
二、使用 extend()
方法合并后排序
适用于需要原地修改第一个列表的场景,但会创建一个新列表用于排序。
list1 = [1, 3, 5]
list2 = [2, 4, 6]
list1.extend(list2)
sorted_list = sorted(list1)
print(sorted_list) # 输出: [1, 2, 3, 4, 5, 6]
三、使用 sorted()
函数合并后排序
适用于需要保留原列表且不介意创建新列表的场景。
list1 = [1, 3, 5]
list2 = [2, 4, 6]
merged_list = sorted(list1 + list2)
print(merged_list) # 输出: [1, 2, 3, 4, 5, 6]
四、合并有序列表并保持排序(推荐)
当两个列表已排序时,使用双指针法合并效率更高,时间复杂度为O(n)。
def merge_sorted_lists(list1, list2):
result = []
i, j = 0, 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
result.append(list1[i])
i += 1
else:
result.append(list2[j])
j += 1
result.extend(list1[i:])
result.extend(list2[j:])
return result
list1 = [1, 3, 6, 7, 9]
list2 = [2, 4, 5, 8, 10]
merged_sorted = merge_sorted_lists(list1, list2)
print(merged_sorted) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
五、使用 heapq.merge
合并多个有序列表
适用于合并多个已排序列表的场景,效率优于逐对合并。
import heapq
list1 = [1, 3, 5]
list2 = [2, 4, 6]
merged_sorted = list(heapq.merge(list1, list2))
print(merged_sorted) # 输出: [1, 2, 3, 4, 5, 6]
总结 :若列表较小或无需保留原列表,优先使用 +
运算符或 extend()
方法;若列表已排序,推荐双指针法或 heapq.merge
以提高效率。