2014-04-24 91 views
0
def accumulate(fn, initial, seq): 
    if seq ==(): 
     return initial 
    else: 
     return fn(seq[0], accumulate(fn, initial, seq[1:])) 

使用accumulate我想寫一個排序函數。使用累積函數來排序列表(高階函數)

def insertion_sort_hof(tup): 
    return accumulate(lambda x,y: x,y = y,x if x > y else None ,() ,tup) 

這是我的代碼,我似乎無法運行它。爲什麼?

insertion_sort_hof(()) #() 
insertion_sort_hof((19,10,1,4,3,1,3, 2)) #(1, 1, 2, 3, 3, 4, 10, 19) 
+0

它不起作用?你會得到什麼錯誤? – Hamatti

+0

'我似乎無法運行它。「你是什麼意思?你打電話了嗎? – SethMMorton

+1

關鍵字arg之後的非關鍵字arg – user3398505

回答

1

一個lambda不能包含賦值,所以你的lambda無效。嘗試添加括號這樣,你會得到一個錯誤信息,即效果:

lambda x,y: (x,y) = (y,x) if x > y else None 

,它不會反正工作,因爲你只能在本地交換的值,以該功能。

+0

TypeError:無法訂購的類型:int()> tuple(),nope不起作用 – user3398505

+0

正如我所說的。你的整個方法是有缺陷的。它需要重新思考。 – ooga

+0

@ user3398505無法定義的類型錯誤意味着您正在嘗試對沒有內在順序的數據進行排序,例如,數字「0」還是「['hat','balloon']」?當你看到這些時,你必須問自己「我想做什麼?」因爲你的輸入數據不統一。 – SethMMorton