使用累加功能对列表进行排序(高阶函数)

时间:2014-04-24 01:49:02

标签: python

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)

1 个答案:

答案 0 :(得分:1)

lambda不能包含赋值,因此lambda无效。尝试添加这样的括号,你会收到一条错误信息:

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

无论如何它都无法工作,因为你只是将值本地交换到该函数。