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

2024-09-25 08:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

Write a purely recursive Python function called Merge3 that takes three lists of numbers each sorted in increasing order as input and outputs a single sorted list by merging elements from the three lists in proper increasing order. For example, Merge3([1,2,72,108],[3,4,94,103],[45,67,456]) should return a list [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]))

有没有一个简单的方法来处理我丢失的三个列表?我觉得这需要很多额外的检查,这将使程序相当长。你能想出一个简洁的方法来做这三个清单吗?在


Tags: and方法in列表returnifordermerge
2条回答

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

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

雅诺斯对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]

相关问题 更多 >