Python:Python列表是否保留len()的计数或是否计入每次调用?

PKK*_*Kid 72 python

如果我继续在很长的列表上调用len(),我是在浪费时间,还是在后台保留int计数?

Fer*_*yer 73

不要担心:当然它会节省计数,因此len()列表是一个非常便宜的操作.顺便说一句,对于字符串,字典和集合也是如此!


AKX*_*AKX 30

还有一种方法可以找出它是如何完成的 在Google Code Search上查找 如果您不想自己下载源代码,请查看GitHub上的源代码.

static Py_ssize_t list_length(PyListObject *a)
{
    return a->ob_size;
}
Run Code Online (Sandbox Code Playgroud)


big*_*ose 10

编写程序,使其优化清晰,易于维护.打电话给你的节目更清楚len(foo)吗?然后这样做.

你担心时间吗?使用timeit标准库中模块测量所花费的时间,并查看它是否在您的代码中是重要的.

与大多数人一样,您可能会错误地猜测程序的哪些部分最慢.避免猜测的诱惑,而是测量它以找出答案.

请记住,用唐纳德克努特的话说,过早的优化是所有邪恶的根源.只关注你测量速度的代码速度,知道它是否值得改变其工作方式的成本.


dF.*_*dF. 5

这个问题已经回答了(len是O(1)),但是这里有你自己检查的方法:

$ python -m timeit -s "l = range(10)" "len(l)"
10000000 loops, best of 3: 0.119 usec per loop
$ python -m timeit -s "l = range(1000000)" "len(l)"
10000000 loops, best of 3: 0.131 usec per loop
Run Code Online (Sandbox Code Playgroud)

是的,不是真的慢.