Python中 len()函数的内部工作
Python中的len()
函数有一个非常奇特的特性,这是人们经常想知道的。无论数据的大小或类型如何,计算可迭代数据结构(字符串、数组、元组等)的长度绝对不需要时间,而且时间相等。这显然意味着O(1)
时间复杂度。但是你有没有想过如何?
Python遵循这样的理念,即保持长度作为属性既便宜又易于维护。 len()
实际上是一个调用方法 '__len__()' 的函数。此方法在可迭代数据结构的预定义类中定义。这个方法实际上作为一个计数器,随着数据的定义和存储而自动递增。因此,当您调用len()
函数时,您不会向解释器提供通过遍历查找长度的命令,而是要求解释器打印一个已经存储的值。因此, Python中的len()
函数以O(1)
复杂度运行。
因此也可以定义为:
def length(ar):
# calling the internally
# defined __len__() method
return ar.__len__()
# Driver code
a = [1, 2, 3, 4]
print(length(a))
输出:
4
注意:这似乎非常有益,但请记住,它在数据定义阶段给解释器带来了巨大的负担。这是Python在竞争性编程中速度较慢的众多原因之一,尤其是在输入量很大的情况下。