我很难理解在python中花费什么时间。 特别在一个例子中,quicksort程序。这里是由几个网站被认为是快速排序的蟒蛇最好的实现:我想解释一下python列表管理优化,总体来说,优化
def theirquicksort(list):
"""Quicksort using list comprehensions"""
if list == []:
return []
else:
pivot = list[0]
lesser = theirquicksort([x for x in list[1:] if x < pivot])
greater = theirquicksort([x for x in list[1:] if x >= pivot])
return lesser + [pivot] + greater
这里是我所期望的是快速排序的最好的实现(是什么教训给我们的在学校很好地执行):
def myquicksort(list):
"""Quicksort not using list comprehensions"""
if list == []:
return []
else:
pivot = list[0]
lesser,greater=[],[]
for i in list[1:]:
if i < pivot:
lesser.append(i)
else:
greater.append(i)
return myquicksort(lesser) + [pivot] + myquicksort(greater)
在theirquicksort,调用迭代列表时,蟒蛇(我猜)运行两次槽的列表,服用或不,元素在较小/较大。 在myquicksort中,python只通过列表运行一次,因此没有任何用处。我的意思是,它不会与我比较两次。因此,它应该以纯粹的数学方式加快速度。 而现在还没有。为什么?
有关优化的另一个问题,即使它的问题少: 当我想添加/乘/任何东西通过视条件的其他东西时,“别的东西”,通常的方式是做:
if condition:
a+=3
else:
a+=1
例如。 但是如果我使用:
a+={True:3,False:1}[condition]
我会失去很多时间吗?我是否会失去时间?乍一看,使用第一种可能性没有问题,但是在计算中,除了这个之外可以放在一行中,其中加1/3(当然只是一个例子)不是第一种,也不是第一种最后的操作,第二种可能性会很有吸引力。但它意味着称这个词典。那么,它有多聪明?
一种在Python中剖析代码性能的方法:https://docs.python.org/2/library/timeit.html请注意,Python中的内置排序方法可能是在Quicksort中实现的优化变体本地代码,并可能会超越任何Python源代码解决方案。 – 2014-12-07 21:00:48
@Matt Coubrough Quicksort是一个例子,在这里。我不怀疑这样一个事实,即综合清单更快,内置实施总是更好,但我想明白为什么会这样。 (我的意思是,综合名单之一) – 2014-12-07 21:03:44
确实是重复的,对此表示歉意。我在相关的问题列表中看到它,但没有看到它,因为我不明白'分区例程'的含义。 – 2014-12-07 22:24:46