Python:如何执行 `len()` 函数

6

可能是重复问题:
len() 函数的成本

Python 如何计算列表的长度(使用 len() 函数)?它是否通过 forwhile 循环来执行相同的操作,还是有一些内部变量存储了列表的长度?


https://dev59.com/G3NA5IYBdhLWcg3wC5NR - eugene_che
x 是如何实现的”和“x 的成本是多少”是两个不同的问题,具有不同的答案。 - Petr Viktorin
1
@Petr:除了x的成本之外,还提供了一个相当大的线索,说明x是如何实现的。例如,如果len运行在O(1)中,那么你可以非常确定地说它有一个内部变量;O(N)可能意味着它逐个计数;而更高的成本则意味着Python开发人员很蠢。 :) - cHao
4个回答

5

5
它使用一个内部变量来存储列表的长度(Python中所有其他可变长度对象类型也是如此)。因此,len()操作是O(1)的,无论列表的大小如何(即在恒定时间内运行)。
这里是列表 len() 实现,这里是它调用的Py_SIZE 宏,这里是 Py_SIZE 使用的ob_size 声明

4
a = range(10)
b = range(1000000)

timeit len(a) # 85.4 ns
timeit len(b) # 94.4 ns

它看起来不像是一个循环。


3

从Python的角度来看,len()函数调用了类的__len__()方法,该方法返回内部已知的长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接