Python高阶函数之sort重写练习

最初级实现法
#sorted 实现
lst = [1,2,5,4,2,3,5,6]
def sort(iterable):
    ret = []
    for x in iterable: #迭代原来的数据
        for i,y in enumerate(ret): #迭代新的列表里的元素,并输出他们的角标
            if x > y:
                ret.insert(i,x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
进阶
lst = [1,2,5,4,2,3,5,6]
def sort(iterable,reverse = False):
    ret = []
    for x in iterable: #迭代原来的数据
        for i,y in enumerate(ret): #迭代新的列表里的元素,并输出他们的角标
            flag =x > y  if not reverse else x < y
            #这里是布尔值
            if flag:
                ret.insert(i,x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
嵌套函数的实现
lst = [1,2,5,4,2,3,5,6]
def sort(iterable,reverse = False):
    #以下为重点,嵌套函数,为内部函数
    def comp(a,b):
        # flag = a > b if not reverse else a < b
        return a > b if not reverse else a < b       
    ret = []
    for x in iterable: #迭代原来的数据
        for i,y in enumerate(ret): #迭代新的列表里的元素,并输出他们的角标
            #这里是布尔值
            if comp(x,y):
                ret.insert(i,x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
高阶函数,参数是函数,简单实现
#sorted 实现
lst = [1,2,5,4,2,3,5,6]

def comp(a, b):
    return a > b
#符合高阶函数,参数key = comp为函数
def sort(iterable,key = comp):
    #以下为重点,嵌套函数,为内部函数
    ret = []
    for x in iterable: #迭代原来的数据
        for i,y in enumerate(ret): #迭代新的列表里的元素,并输出他们的角标
            #这里是布尔值
            if comp(x,y):
                ret.insert(i,x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
最终想要的额结果

#sorted 实现
lst = [1,2,5,4,2,3,5,6]
def comp(a, b):
    return a > b
#符合高阶函数,参数key = comp为函数
def sort(iterable,key = comp,reverse = False):
    ret = []
    for x in iterable: #迭代原来的数据
        for i,y in enumerate(ret): #迭代新的列表里的元素,并输出他们的角标
            flag = comp(x,y) if reverse else comp(y,x)
            #这里是布尔值
            if flag:
                ret.insert(i,x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。