【发布时间】:2011-03-17 08:30:54
【问题描述】:
我最近在学习python,并且正在使用该语言进行很多练习。
我发现有趣的一件事是,当我从数组中读取时,它几乎比 list 慢一半的时间。有人知道为什么吗?
这是我的代码:
从 timeit 导入计时器 导入数组 t = 10000 l = 范围(t) a = array.array('i', l) 定义列表(): 对于 xrange(t) 中的 i: l[i] 定义数组(): 对于 xrange(t) 中的 i: 一个[我] 打印计时器(列表).timeit(1000); 打印计时器(数组).timeit(1000);输出是:
0.813191890717 1.16269612312表示读取数组比列表慢。 我认为数组是一个固定大小的内存,而列表是一个动态结构。 所以我认为数组会比列表快。
有人解释一下吗?
【问题讨论】:
-
可能的欺骗/答案:stackoverflow.com/questions/176011/… - 基本上 array.array 是一个 C 数组的包装器,所以我认为访问它时会有开销。不要用它来做数学。
-
试图猜测 Python 的效率——尤其是对于那些来自类 C 背景的人——通常是违反直觉的。先写清楚代码,然后在衡量性能问题时进行优化;这也适用于 C,但因为语言元素非常接近人们经常忘记的机器。
-
对于数学,你可能想使用 numpy(python 3 尚不可用),只有天知道为什么 numpy 不是标准库。
-
numpy 在 Python 3 上非常接近可用:mail-archive.com/numpy-discussion@scipy.org/msg26524.html
标签: python