我已经能够解决如何按升序合并两个已排序的列表了,但是我在找到一种在相反方向上合并这两个列表成一个降序列表的方法时遇到了困难。有没有办法不用在合并后再翻转字符串?
你只需要反过来做所有的事情--从尾部检索项目而不是头部,进行比较时选择更大的那个,并在另一个用尽时以相反的顺序返回剩余的列表:
def merge(lst1, lst2):
if not lst1:
return lst2[::-1]
if not lst2:
return lst1[::-1]
if lst1[-1] < lst2[-1]:
return [lst2[-1]] + merge(lst1, lst2[:-1])
else:
return [lst1[-1]] + merge(lst1[:-1], lst2)
merge([2,5,9,12], [0,1,3,4,8])
[12, 9, 8, 5, 4, 3, 2, 1, 0]
[::-1]
,您可以通过循环遍历列表并从尾部逐个迭代列表项,然后将该项附加到新列表中来自行反转列表。重要的是,您需要以相反的顺序返回剩余的列表,因为您希望输出按降序排列,但输入列表是按升序排列的。 - blhsingreversed
。 - jpp
>
改为<=
会发生什么? - Chai T. Rexlst1
和lst2
都是按升序排序的,对吗? - Hemerson Tacon