daf*_*man 13 python performance operators set
这就是我的意思:
> python -m timeit "set().difference(xrange(0,10))"
1000000 loops, best of 3: 0.624 usec per loop
> python -m timeit "set().difference(xrange(0,10**4))"
10000 loops, best of 3: 170 usec per loop
Run Code Online (Sandbox Code Playgroud)
显然python遍历整个参数,即使事先知道结果是空集.这有什么好的理由吗?代码在python 2.7.6中运行.
(即使对于非空集,如果您发现在迭代中途已经删除了所有第一组元素,则立即停止是有意义的.)
这有什么好的理由吗?
之前没有为空集提供特殊路径.
即使对于非空集,如果您发现在迭代中途已经删除了所有第一组元素,那么立即停止是有意义的.
这是一个合理的优化请求.我做了一个补丁,很快就会申请.以下是应用补丁的新时间:
$ py -m timeit -s "r = range(10 ** 4); s = set()" "s.difference(r)"
10000000 loops, best of 3: 0.104 usec per loop
$ py -m timeit -s "r = set(range(10 ** 4)); s = set()" "s.difference(r)"
10000000 loops, best of 3: 0.105 usec per loop
$ py -m timeit -s "r = range(10 ** 4); s = set()" "s.difference_update(r)"
10000000 loops, best of 3: 0.0659 usec per loop
$ py -m timeit -s "r = set(range(10 ** 4)); s = set()" "s.difference_update(r)"
10000000 loops, best of 3: 0.0684 usec per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |