python的高阶函数(map,filter,sorted,reduce)

高阶函数

map

  • map(function, iterable)函数接收两个参数,一个是函数名,一个是Iterable

  • 重点:一一映射,可改变

    • 返回1到10的平方

      • def f(x):
            return x ** 2
        
        ret = map(f, range(10))
        
        print(next(ret))
        print(list(ret))  # 因为0已经被上面的next方法取出了,所以在这列表输出中没有0的元素
        

        0
        [1, 4, 9, 16, 25, 36, 49, 64, 81]

    • map函数也可穿多个参数,会已最短的那个可迭代对象取值完毕作为程序结束

      • li1 = [1,2,3,4,5]
        li2 = ['a','b','c'] ###
        print(list(map(lambda a,b:(a,b), li1, li2)))
        

        [(1, ‘a’), (2, ‘b’), (3, ‘c’)]

filter

  • filter(function, iterable)

  • 重点:不可改变可迭代对象中原本的值

    • 保留偶数,去除奇数

      • def ou(i):
            return i%2 == 0
        li = [2,1,3,4,5,6]
        ret = filter(ou, li)
        print(list(ret))
        

        [2, 4, 6]

    • 去掉bool值为False的元素

      • def f(i):
            return i
        print(list(filter(f, ['A','B',None,'C','','a',1,0])))
        

        [‘A’, ‘B’, ‘C’, ‘a’, 1]

sorted

  • sorted(iterable, key=)。key:排序规则,它还可以接收一个key函数来实现自定义的排序

    key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

    • 按绝对值排序

      • li = [36, 5,2, -12, 9, -21]
        print(sorted(li, key=abs))
        

        [2, 5, 9, -12, -21, 36]

    • 忽略元素的首字母大小写排序

      • myli = ['bob', 'about', 'Zoo', 'Credit']
        def f(i):
            return i.lower()
        print(sorted(myli, key=f))
        

        [‘about’, ‘bob’, ‘Credit’, ‘Zoo’]

reduce

  • reduce(function, iterable)

  • eg:reduce(f, [x1, x2, x3, x4]) => f(f(f(x1, x2), x3), x4)

    • 将[1, 3, 5, 7, 9]转化为13579

      • from functools import reduce
        #
        def sup_add(x, y):
            return x * 10 + y
        
        print(reduce(sup_add, [1, 3, 5, 7, 9]))
        

        13579

    • 得到累乘的结果

      • print(reduce(lambda x, y: x * y, [1, 2, 3, 4]))
        

        24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值