Tim*_*imY 7 python sorting optimization performance
这是我运行的代码:
import timeit
print timeit.Timer('''a = sorted(x)''', '''x = [(2, 'bla'), (4, 'boo'), (3, 4), (1, 2) , (0, 1), (4, 3), (2, 1) , (0, 0)]''').timeit(number = 1000)
print timeit.Timer('''a=x[:];a.sort()''', '''x = [(2, 'bla'), (4, 'boo'), (3, 4), (1, 2) , (0, 1), (4, 3), (2, 1) , (0, 0)]''').timeit(number = 1000)
Run Code Online (Sandbox Code Playgroud)
以下是结果:
0.00259663215837
0.00207390190177
Run Code Online (Sandbox Code Playgroud)
我想知道为什么使用.sort()始终比sorted()更快,即使两者都是复制列表?
注意:我在带有Win7的2.53Ghz i5上运行Python 2.7
您所看到的差异微乎其微,并且对于更长的列表完全消失.只需添加* 1000
定义,x
我的机器就会得到以下结果:
2.74775004387
2.7489669323
Run Code Online (Sandbox Code Playgroud)
我最好的猜测sorted()
是因为你sorted()
需要使用一些可以将任何可迭代复制到列表的通用代码,而直接复制列表可以假设源也是一个列表.通过CPython的使用排序的代码实际上是相同的list.sort()
和sorted()
,所以这不是什么原因造成的差异.
编辑:当前开发版sorted()
的源代码确实与道德相当
a = list(x)
a.sort()
Run Code Online (Sandbox Code Playgroud)
实际上,使用此代码而不是第二个版本可以消除任何列表大小的显着速度差异.