我有两个python函数,用于对作为字符串包含的整数列表进行排序。详情如下:
import random
n = 10000000
unsorted = [str(x) for x in range(n)]
random.shuffle(unsorted)
def sort_alg1(unsorted):
unsorted.sort(key = lambda x: int(x))
return unsorted
def sort_alg2(unsorted):
l=list(map(int,unsorted))
l.sort()
s=list(map(str,l))
return s
print(sort_alg1(unsorted))
print(sort_alg2(unsorted))
两种方法都能如期工作。然而,根据我的剖析器(我使用的是罗伯特·克恩(robert kern)一直流行的line_剖析器),第一个函数。 sort_alg1
执行速度比 sort_alg2
. 如果我能找出原因的话,这不会是一个大问题,但我不能。我已尝试查找内置数据库中的差异 sort()
方法与 map()
功能、lambda等均无效。如果有人能告诉我为什么会发生这种事,那就太好了!
2条答案
按热度按时间dgsult0t1#
做一些基准测试:
印刷品:
看来
sort_alg2
速度更快。但原因是sort_alg2
从接收已排序的数组sort_alg1
. 如果您稍微更改基准:印刷品:
所以第一个函数更快。
yyyllmsg2#
unsorted.sort
在功能上sort_alg1
对列表进行适当排序,以便sort_alg2
并不是从完全相同的版本开始的unsorted
列表而且一次sort_alg2
执行语句l = list(map(int, unsorted))
,l
如果按整数值排序,则现在是一个完全排序的列表。所以l.sort()
将在平凡的时间内运行。注意
assert
声明sort_alg2
功能: