【问题标题】:Which is faster in Python for popping elements in between- list or set? [closed]在 Python 中,在列表或集合中弹出元素哪个更快? [关闭]
【发布时间】:2021-09-15 09:58:33
【问题描述】:

我有一个要求,其中需要弹出中间的元素。对于这个要求,哪个会更快? python中的集合还是列表?

【问题讨论】:

  • 如果你从列表的前面弹出,那么一组在O(1) 中完成,而列表是O(N),如果你从最后弹出,那么他们都这样做在O(1).
  • 你可以参考this
  • “中间的元素”是什么意思?这没有意义 - 在 what 之间? “之间”应该是按位置还是按价值? (集合没有元素位置,所以如果是按位置,集合肯定不起作用。)

标签: python list algorithm set time-complexity


【解决方案1】:

当你从一个列表中弹出一个项目时,所有的归档元素都会被移动,所以平均来说操作是 O(n)。弹出第一个元素是最坏的情况,因为整个列表必须移动。弹出最后一个元素实际上是 O(1),因为不需要移动。据我所知,python 列表不会重新分配到较小的缓冲区,因此只有在弹出第一个元素时才会复制整个列表。

集合被实现为哈希值。除非你遇到灾难性的碰撞,否则弹出一个元素总是 O(1)。如果您要弹出任意元素,因为集合是无序的,即使遇到冲突,它也可能是 O(1),具体取决于存储桶的实现方式。

【讨论】:

  • 是的,我在看set和list的实现细节。谢谢
  • 这是对删除一个元素的成本的准确描述,但是“中间的元素”使事情变得复杂,无论它应该是什么意思。从列表中删除一系列元素比仅逐个删除元素更有效。此外,根据我们所讨论的“之间”类型,这个概念可能实际上并不适用于集合。
  • @user2357112supportsMonica。这个答案一团糟,因为它已经很晚了,我把它吐出来了,没有注意到问题中的细节,但不知何故,它回答了我猜的任何 OP 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多