我正在尝试从 Google 的 Python 类中解决以下练习。
E. 给定两个按升序排序的列表,创建并返回按排序顺序排列的所有元素的合并列表。您可以修改传入的列表。理想情况下,解决方案应该在“线性”时间内工作,对两个列表进行一次遍历。
我正在使用以下方案方法(我希望我有汽车、cdr 和缺点!)。
def helper(list1, list2, result):
if list1 == None:
return result + list2
elif list2 == None:
return result + list1
elif list1[0] < list2[0]:
return helper(list1[1:], list2, result.insert(0, list1[0]))
else:
return helper(list1, list2[1:], result.insert(0, list2[0]))
def linear_merge(list1, list2):
helper(list1, list2, [])
我得到的错误是,当结果为 [] 时,我似乎无法将元素插入结果中:
AttributeError: 'NoneType' object has no attribute 'insert'
但这在控制台中工作正常:
>>> b = []
[]
>>> b.insert(0, 4)
>>> b
[4]
我是 Python 的新手,所以我有两个问题:
- 关于 None 与 [],我缺少什么,以及如何使此代码正常工作?
- 如果 Python 不是用于 Scheme/Lisp 方法,那么解决这个问题的“Python 方法”是什么?这对我来说不太重要,因为我可以检查解决方案。
谢谢!