某些PEP是否为内置序列类型保证了len(...)的O(1)复杂度?

时间:2016-07-24 15:16:05

标签: python

许多有关len(...)费用的问题已得到解答,但我找不到任何Python文档的链接。

是标准的(在某些PEP中有记录)还是在大多数Python实现中当前如何实现?

1 个答案:

答案 0 :(得分:2)

有关某些内置python对象的时间复杂度的文档是here

python中的len()函数只调用类中的__len__方法。所以如果你构建了一个自定义类

class SlowLenList(object):

  def __init__(self, mylist):
    self.mylist = mylist

  def __len__(self):
    total = 1
    for item in self.mylist:
      total += 1
    return total

然后在这种情况下复杂度为O(n)。所以它真的取决于你所呼唤的对象。我假设内置列表和其他对象是O(1),因为它们在实例上有一个属性,每次将项添加到对象时它都会递增。