如果我有两个列表,每个800个元素长并填充整数.有没有比使用内置==运算符更快的方式来比较它们具有完全相同的元素(如果没有,则为短路)?
a = [6,2,3,88,54,-486]
b = [6,2,3,88,54,-486]
a == b
>>> True
Run Code Online (Sandbox Code Playgroud)
有什么比这更好的?
我很好奇只因为我有一个巨大的列表列表可供比较.
Cla*_*diu 10
我们不假设,但进行一些测试!
设置:
>>> import time
>>> def timeit(l1, l2, n):
start = time.time()
for i in xrange(n):
l1 == l2
end = time.time()
print "%d took %.2fs" % (n, end - start)
Run Code Online (Sandbox Code Playgroud)
两个巨大的平等名单:
>>> hugeequal1 = [10]*30000
>>> hugeequal2 = [10]*30000
>>> timeit(hugeequal1, hugeequal2, 10000)
10000 took 3.07s
Run Code Online (Sandbox Code Playgroud)
第一个元素不相等的两个巨型列表:
>>> easydiff1 = [10]*30000
>>> easydiff2 = [10]*30000
>>> easydiff2[0] = 0
>>> timeit(easydiff1, easydiff2, 10000)
10000 took 0.00s
>>> timeit(easydiff1, easydiff2, 1000000)
1000000 took 0.14s
Run Code Online (Sandbox Code Playgroud)
所以看起来内置列表相等运算符确实做了短路.
编辑:有趣的是,使用该array.array模块并没有使它更快:
>>> import array
>>> timeit(hugeequal1, hugeequal2, 1000)
1000 took 0.30s
>>> timeit(array.array('l', hugeequal1), array.array('l', hugeequal2), 1000)
1000 took 1.11s
Run Code Online (Sandbox Code Playgroud)
numpy 但是会让你获得更好的加速:
>>> import numpy
>>> timeit(hugeequal1, hugeequal2, 10000)
10000 took 3.01s
>>> timeit(numpy.array(hugeequal1), numpy.array(hugeequal2), 10000)
10000 took 1.11s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |