合并双端序列
时间: 2025-04-30 21:31:16 浏览: 16
### Python 中合并两个有序列表
对于给定的两个已排序列表 `list1` 和 `list2`,可以通过多种方式将其合并为一个新的有序列表。以下是几种常见的方法:
#### 方法一:逐项比较法
这种方法通过遍历两个列表并将较小的元素依次加入新列表中。
```python
def merge_sorted_lists(list1, list2):
merged_list = []
i, j = 0, 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
merged_list.append(list1[i])
i += 1
else:
merged_list.append(list2[j])
j += 1
# 将剩余部分添加到merged_list中
merged_list.extend(list1[i:])
merged_list.extend(list2[j:])
return merged_list
```
此方法的时间复杂度为 O(n + m),其中 n 和 m 分别代表输入列表的长度[^1]。
#### 方法二:使用内置函数
Python 提供了一个方便快捷的方式——利用 `heapq.merge()` 函数来完成这项任务。该函数能够高效处理多个可迭代对象,并返回一个按升序排列的新迭代器。
```python
import heapq
def merge_with_heapq(list1, list2):
return list(heapq.merge(list1, list2))
```
这种方式不仅适用于两个列表的情况,还可以轻松扩展至更多数量的有序序列[^4]。
#### 方法三:基于归并排序的思想
考虑到归并排序的核心在于将两个已经排好序的部分合成为一个更大的有序集合,在这里也可以采用类似的策略来进行合并操作。具体来说就是模仿归并阶段的过程。
```python
def merge_two_sorted_arrays(A, B):
result = []
a_idx, b_idx = 0, 0
while a_idx < len(A) and b_idx < len(B):
if A[a_idx] <= B[b_idx]:
result.append(A[a_idx])
a_idx += 1
else:
result.append(B[b_idx])
b_idx += 1
# 如果A还有剩余,则全部追加进来;如果B有剩则同样如此做。
result.extend(A[a_idx:])
result.extend(B[b_idx:])
return result
```
上述三种方案都可以有效地解决这个问题,选择哪种取决于具体的场景和个人偏好。值得注意的是,当面对更复杂的结构如链表时,可以考虑使用迭代或者递归来实现更加优雅高效的解决方案[^3]。
阅读全文
相关推荐

















