在回答另一个问题时,我建议使用timeit
来测试用正整数与负整数索引列表之间的区别。这是代码:
import timeit
t=timeit.timeit('mylist[99]',setup='mylist=list(range(100))',number=10000000)
print (t)
t=timeit.timeit('mylist[-1]',setup='mylist=list(range(100))',number=10000000)
print (t)
我用 python 2.6 运行了这段代码:
$ python2.6 test.py
0.587687015533
0.586369991302
然后我用 python 3.2 运行它:
$ python3.2 test.py
0.9212150573730469
1.0225799083709717
然后我挠了挠头,做了一点谷歌搜索,并决定在这里发布这些观察结果。
操作系统:OS-X (10.5.8) -- Intel Core2Duo
这对我来说似乎是一个非常显着的差异(超过 1.5 倍的差异)。有谁知道为什么 python3 这么慢 - 特别是对于这样一个常见的操作?
编辑
我在我的 Ubuntu Linux 桌面(Intel i7)上运行了相同的代码,并在 python2.6 和 python 3.2 上取得了可比的结果。这似乎是一个依赖于操作系统(或处理器)的问题(其他用户在 Linux 机器上看到了相同的行为——见评论)。
编辑 2
在其中一个答案中要求启动横幅,所以这里是:
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
和:
Python 3.2 (r32:88452, Feb 20 2011, 10:19:59)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
更新
我刚刚从http://www.python.org/download/安装了新版本的 python2.7.3 和 python3.2.3
在这两种情况下,我都采取了
“Python xx3 Mac OS X 32 位 i386/PPC 安装程序(适用于 Mac OS X 10.3 到 10.6 [2])”
因为我在 OS X 10.5 上。以下是新的时间安排(通过多次试验相当一致):
蟒蛇2.7
$python2.7 test.py
0.577006101608
0.590042829514
蟒蛇3.2.3
$python3.2 test.py
0.8882801532745361
1.034242868423462