Python2.7集合和列表消除了时间复杂性

Python2.7集合和列表消除了时间复杂性,python,python-2.7,Python,Python 2.7,想知道移除列表和移除集合的时间复杂性 我的思想和学习成果是 删除列表是O(n) 移除集合是O(1) 我只是研究了一些讨论,但从未证明过。如果有人能发光,那就太好了。特别是set如何实现O(1)删除 使用Python2.7 a = set([1,2,3,4,5]) b = [1,2,3,4,5] a.remove(3) b.remove(3) print a print b 从文档中: 列表。删除(x) 从值为x的列表中删除第一个项。 如果没有此类项目,则为错误 不必详细介绍实现,要删除的项

想知道移除列表和移除集合的时间复杂性

我的思想和学习成果是

  • 删除列表是
    O(n)
  • 移除集合是
    O(1)
  • 我只是研究了一些讨论,但从未证明过。如果有人能发光,那就太好了。特别是set如何实现
    O(1)
    删除

    使用Python2.7

    a = set([1,2,3,4,5])
    b = [1,2,3,4,5]
    
    a.remove(3)
    b.remove(3)
    
    print a
    print b
    
    从文档中:

    列表。删除(x) 从值为x的列表中删除第一个项。 如果没有此类项目,则为错误

    不必详细介绍实现,要删除的项可以位于列表中的任何位置。线性扫描时间是必要的,以便在删除项目之前找到该项目。一旦找到要删除的项的索引,就需要将所有元素按一个索引向下移动。在任何情况下都有
    index
    遍历量和
    size-index
    移位量。因此,删除时间相当于遍历整个列表:O(n)

    您可以在这里找到源:(还可以查找
    list\u ass_slice(..)


    然而,一套是不同的。它使用正在存储的对象的散列值在其bucket中定位该对象。平均而言,使用哈希值定位对象的时间几乎是恒定的。请注意,在散列冲突和需要进一步搜索的情况下,可能并不总是固定时间。但是假设一个好的散列函数,它通常是


    更新:我必须感谢Stefan Pochmann指出了错误。

    我认为删除集合只是平均情况0(1)。Python集是散列集,所以您可以查找的理论,它应该适用。@juanpa.arrivillaga,谢谢,列表删除是
    O(n)
    ,对吗?请参阅“CPython将列表实现为链接列表”。我不这么认为。请提供参考。