合并三个排序列表的递归Python程序

时间:2018-11-03 14:43:02

标签: python sorting recursion computer-science

  

编写一个名为Merge3的纯递归Python函数,该函数将三个以递增顺序排列的数字列表作为输入,并通过以适当的递增顺序合并三个列表中的元素来输出单个排序的列表。例如,Merge3([1,2,72,108],[3,4,94,103],[45,67,456])应该返回列表[1,2,3,4,45,67,72,94,103,108,456]

我能够为两个列表编写一个版本,但是我正努力想出一种紧凑的方法来为三个列表编写版本。请参阅下面的示例:

def Merge2(A, B):
  if A == []:
    return B
  if B == []:
    return A
  if A != [] and B != []:
    if A[0] > B[0]:
      return [B[0]] + Merge(A, B[1:])
    else:
      return [A[0]] + Merge(A[1:], B)

print(Merge2([1, 2, 6, 7],[3, 4, 8, 9]))

有没有一种简单的方法可以对我遗失的三个列表执行此操作?我觉得这将需要很多额外的检查,这将使程序相当长。您能否提出一种简洁的方法来针对三个列表进行操作?

2 个答案:

答案 0 :(得分:3)

解决此问题的一种简单方法是重复使用您已经拥有的Merge2

def Merge3(A, B, C):
    return Merge2(Merge2(A, B), C)

答案 1 :(得分:1)

janos对Merge3的回答是完美的。我确实想为您提供Merge2的改进-

def Merge2(A, B):
  if not A:
    return B
  elif not B:
    return A
  elif A[0] > B[0]:
    return [B[0]] + Merge2(A, B[1:])
  else:
    return [A[0]] + Merge2(A[1:], B)

print(Merge2([1, 2, 6, 7],[3, 4, 8, 9, 11, 13]))
# [1, 2, 3, 4, 6, 7, 8, 9, 11, 13]