小编Meg*_*lor的帖子

Python 中列表的线性合并

我正在做Google 的 Python 课程练习。其中一个练习是这样的:

给定两个按升序排序的列表,创建并返回按排序顺序的所有元素的合并列表。您可以修改传入的列表。理想情况下,该解决方案应在“线性”时间内工作,对两个列表进行一次传递。

我想出的解决方案是:

    def linear_merge(list1, list2):
      list1.extend(list2) 
      return sorted(list1)
Run Code Online (Sandbox Code Playgroud)

它通过了测试功能,但给出的解决方案是这样的:

    def linear_merge(list1, list2):
      result = []
      # Look at the two lists so long as both are non-empty.
      # Take whichever element [0] is smaller.
      while len(list1) and len(list2):
        if list1[0] < list2[0]:
          result.append(list1.pop(0))
         else:
          result.append(list2.pop(0))

      # Now tack on what's left
      result.extend(list1)
      result.extend(list2)
      return result
Run Code Online (Sandbox Code Playgroud)

作为解决方案的一部分包括:

注意:上面的解决方案有点可爱,但不幸的是 list.pop(0) 不是标准 python 列表实现的恒定时间,所以上面的不是严格的线性时间。另一种方法是使用 pop(-1) 从每个列表中删除最后的元素,构建一个向后的解决方案列表。然后使用reverse()将结果恢复到正确的顺序。该解决方案在线性时间内有效,但更难看。

为什么这两种解决方案如此不同?我是否遗漏了什么,或者它们是否不必要地复杂?

python sorting list

5
推荐指数
1
解决办法
9850
查看次数

标签 统计

list ×1

python ×1

sorting ×1