2014-12-07 92 views
-2

我很難理解在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(當然只是一個例子)不是第一種,也不是第一種最後的操作,第二種可能性會很有吸引力。但它意味着稱這個詞典。那麼,它有多聰明?

+3

一種在Python中剖析代碼性能的方法:https://docs.python.org/2/library/timeit.html請注意,Python中的內置排序方法可能是在Quicksort中實現的優化變體本地代碼,並可能會超越任何Python源代碼解決方案。 – 2014-12-07 21:00:48

+0

@Matt Coubrough Quicksort是一個例子,在這裏。我不懷疑這樣一個事實,即綜合清單更快,內置實施總是更好,但我想明白爲什麼會這樣。 (我的意思是,綜合名單之一) – 2014-12-07 21:03:44

+0

確實是重複的,對此表示歉意。我在相關的問題列表中看到它,但沒有看到它,因爲我不明白'分區例程'的含義。 – 2014-12-07 22:24:46

回答