【问题标题】:Recursive Python Program to Merge Three Sorted Lists用于合并三个排序列表的递归 Python 程序
【发布时间】:2019-04-07 12:19:11
【问题描述】:

编写一个名为 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]))

对于我缺少的三个列表,是否有一种简单的方法可以做到这一点?我觉得这将需要大量额外的检查,这会使程序相当长。你能想出一个简洁的方法来为三个列表执行此操作吗?

【问题讨论】:

  • 如果您可以为两个列表做到这一点,从技术上讲,您已经为三个列表做到了。由于两个列表返回另一个排序列表,您只需应用两个列表函数两次 - 首先在 A 和 B 上获取 D,然后在 D 和 C 上。

标签: python sorting recursion computer-science


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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]
    

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2018-01-04
      • 2017-01-11
      • 2017-04-28
      • 2021-11-06
      相关资源
      最近更新 更多