【问题标题】:Merge sorted lists Python合并排序列表 Python
【发布时间】:2020-10-25 14:20:39
【问题描述】:

假设我们有两个列表L1L2,其中包含按升序排序的整数。我想创建一个函数merge,它将这些列表作为参数并返回一个新的排序列表L,其中包含L1L2 的所有元素,即len(L) = len(L1) + len(L2)。我想使用两个列表都已排序但在实现merge 函数时不允许使用排序方法这一事实。

这是我的代码,我不知道为什么不对:

def merge(L1,L2):
    L = L1 + L2
    return L

def main():
    L1 = [1,2,5,9,12]
    L2 = [2,6,10]
    L = sorted(merge(L1,L2))
    print(L)

【问题讨论】:

  • 你的代码有什么问题?
  • 您不能使用 sorted 对合并函数的输出进行排序。
  • 对两个列表进行了排序。您可以创建另一个列表。检查 L1[i]
  • "但是,您可以在主函数中使用这些排序来创建合并函数的输入。"这不是您在这里使用sorted 的方式。您正在使用它对结果进行排序。那不是他们想要的。 merge 应该工作的方式,结果已经被排序了。
  • 我给你两堆卡片。每个都已经排序。我要你把所有的卡片堆在一起,这是一个排序的堆。但是您一次只能从任一堆中取出一张牌,并将其放在结果堆的顶部。你知道怎么做吗?

标签: python sorting merge


【解决方案1】:

您的错误是不允许使用sorted。您需要通过同时迭代两个列表并每次选择最小的元素来将元素一一插入到新列表中(因为列表已经排序,这很容易)。

def merge(L1,L2):
    L = []
    # Keep 2 indices, one per list
    idx_L1 = 0
    idx_L2 = 0
    # Iterate over both lists at the same time
    while idx_L1 < len(L1) or idx_L2 < len(L2):
        # Check if we reached the end of any of the lists
        if idx_L1 == len(L1):
            L.append(L2[idx_L2])
            idx_L2 += 1
        elif idx_L2 == len(L2):
            L.append(L1[idx_L1])
            idx_L1 += 1
        # Add the smallest element from the two pointers
        elif L1[idx_L1] < L2[idx_L2]:
            L.append(L1[idx_L1])
            idx_L1 += 1
        else:
            L.append(L2[idx_L2])
            idx_L2 += 1
    return L

def main():
    L1 = [1,2,5,9,12]
    L2 = [2,6,10]
    L = merge(L1, L2)
    print(L)

if __name__ == "__main__":
    main()

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2022-10-05
    • 2014-12-02
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2011-05-17
    相关资源
    最近更新 更多