当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Python:Python列表是否保留len()的计数或是否计入每次调用?》经验,为你挑选了5个好方法。

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



1> Ferdinand Be..:

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



2> AKX..:

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

static Py_ssize_t list_length(PyListObject *a)
{
    return a->ob_size;
}



3> George V. Re..:

len是O(1)操作.



4> bignose..:

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

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

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

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



5> dF...:

这个问题已经回答了(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

是的,不是真的慢.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有