gpt4 book ai didi

python - 为什么Python的 "sorted()"比 "copy, then .sort()"慢

转载 作者:太空狗 更新时间:2023-10-29 21:37:53 25 4
gpt4 key购买 nike

这是我运行的代码:

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)

结果如下:

0.00259663215837
0.00207390190177

我想知道为什么使用 .sort() 始终比 sorted() 快,即使两者都是复制列表?

注意:我在 2.53Ghz i5 和 Win7 上运行 Python 2.7

最佳答案

您看到的差异很小,对于更长的列表完全消失。只需将 * 1000 添加到 x 的定义中即可在我的机器上得到以下结果:

2.74775004387
2.7489669323

对于 sorted() 对您来说稍微慢一点的原因,我最好的猜测是 sorted() 需要使用一些可以复制任何的通用代码 可迭代到一个列表,而直接复制列表可以假设源也是一个列表。 CPython 使用的排序代码对于 list.sort()sorted() 实际上是相同的,所以这不是造成差异的原因。

编辑:source code of the current development version of sorted()在道德上相当于

a = list(x)
a.sort()

事实上,使用此代码而不是您的第二个版本可以消除任何列表大小的任何显着速度差异。

关于python - 为什么Python的 "sorted()"比 "copy, then .sort()"慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11547588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com