合并两个有序序列
1、题目要求
已知有两个有序的列表,内容分别为
[2,4,6,9] 和 [3,5,8,10] ,请编写一个函数,合并这两个列表并返回,合并后,列表里的元素依然是有序的
结果为[2, 3, 4, 5, 6, 8, 9, 10]
函数定义为 def merge_lst(lst1,lst2)
2、程序分析
- 不要试图将一个列表的元素写入另一个列表,因为这样会破坏原来的一个列表
- 要借助着两个列表原本就有序的特点,创建一个新的列表,然后从这两个列表里抽出数据放入新列表
- 每次从这两个列表里取出最小的数值,进行比较,较小的那一个放入新列表
- 重复第3步,直到其中一个列表里的元素都取走
- 如果有一个列表里还有元素,则把剩余的元素全部放入新列表
第3步可能会让你感到一些困惑,要明白,这两个列表原本就是有序的,因此,只需要根据索引从小到大取值就可以了,你需要一个变量来记录当前这个列表已经取到元素的索引,如果这个取出来的值被放入到了新列表,这个记录索引的变量则加1,下一次取值的时候,直接使用
3、示例代码
#coding=utf-8
lst1 = [2,4,6,9]
lst2 = [3,5,8,10]
def merge_lst(lst1,lst2):
lst = []
index1,index2 = 0,0
while index1 < len(lst1) and index2 < len(lst2):
left = lst1[index1]
right = lst2[index2]
if left <= right:
lst.append(left)
index1 += 1
else:
lst.append(right)
index2 += 1
if index1 < len(lst1):
lst.extend(lst1[index1:])
if index2 < len(lst2):
lst.extend(lst2[index2:])
return lst
if __name__ == '__main__':
print merge_lst(lst1,lst2)