【问题标题】:Why is the big O of pop() different from pop(0) in python [duplicate]为什么pop()的大O与python中的pop(0)不同[重复]
【发布时间】:2016-04-10 13:06:56
【问题描述】:

他们不应该都是O(1),因为从 Python 列表中的任何位置弹出一个元素都涉及破坏该列表并在新的内存位置创建一个?

【问题讨论】:

  • @thefourtheye 在 python 列表中

标签: python algorithm list big-o


【解决方案1】:

Python 的 list 实现在底层使用了动态调整大小的 C array,删除元素通常需要您在后面移动元素以防止出现间隙。

list.pop() 不带参数会删除 last 元素。访问该元素可以在恒定时间内完成。后面没有元素,所以不需要移动任何东西。

list.pop(0) 删除 first 元素。 所有剩余的元素必须上移一步,因此需要 O(n) 线性时间。

【讨论】:

    【解决方案2】:

    要补充 Martijn 的答案,如果您想要一个两端都有恒定时间弹出的数据结构,请查看 collections.deque

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2022-06-14
      • 2015-01-10
      • 2014-09-22
      相关资源
      最近更新 更多