我尝试定义一个名为combine的函数,将两个列表作为参数,并以递归方式将它们组合成一个排序列表。
def combine (l1,l2):
if l1 == []:
return l2
elif l2 == []:
return l1
elif l1 == [] and l2 == []:
return []
sort_l = []
index = 0
for num in l1:
if num <= l2[0]:
sort_l.append(num)
index += 1
else:
return combine(l2, l1[index:])
return sort_l + l2
它给了我:
combine([1,3,5,7,9],[0,2,4,6,8]) -> [8, 9]
但应该:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
任何建议???
答案 0 :(得分:3)
python列表可以与简单的+
结合使用,内置函数sorted()
将为您排序列表中的项目。
sorted(l1 + l2) = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 1 :(得分:0)
你的方法是正确的。但是,您在每次递归调用中重新分配sort_l
。您需要在函数外定义它,或者在每次创建函数后传递它:
sort_l = []
def combine (l1,l2):
if l1 == []:
return l2
elif l2 == []:
return l1
elif l1 == [] and l2 == []:
return []
index = 0
for num in l1:
if num <= l2[0]:
sort_l.append(num)
index += 1
else:
return combine(l2, l1[index:])
return sort_l + l2
或
def combine (l1,l2, sort_l=None):
if sort_l is None:
sort_l = []
if l1 == []:
return l2
elif l2 == []:
return l1
elif l1 == [] and l2 == []:
return []
index = 0
for num in l1:
if num <= l2[0]:
sort_l.append(num)
index += 1
else:
return combine(l2, l1[index:], sort_l) # pass it here
return sort_l + l2
combine([1,3,5,7,9],[0,2,4,6,8]) # Don't pass any list, it will be created in first call.
答案 2 :(得分:0)
程序应该是这样的:
<td align="right" id="marketUpdate_lastTrade" class="compProfileTextBold">62.90</td>
答案 3 :(得分:0)
你很亲密。诀窍是将l1[0]
和l2[0]
中较小的一个放在递归combine()
的结果前面:
def combine (l1,l2):
if l1 == []:
return l2
if l2 == []:
return l1
if l1[0] <= l2[0]:
return [l1[0]] + combine(l1[1:], l2)
return [l2[0]] + combine(l1, l2[1:])