zoukankan      html  css  js  c++  java
  • 4.1、高阶函数

    1、map/reduce

    Python内建了map()reduce()函数。

    map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

    举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5]上,就可以用map()实现如下:

     r=map(f,[1,2,3,4,5])

     reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)

     

    ( ((1X10+2)X10+3)X10+4)+5

    char2int:返回数字字符对应的值,map()得到字符串对应的所有数值

    fn将两个数值变成一个十位数,reduce()得到一串数对应的数

    def normalize(name):
        return name[0].upper()+name[1:].lower()
    list(map(normalize,['adam', 'LISA', 'barT']))
    
    ['Adam', 'Lisa', 'Bart']
    def prod(L):
        return reduce(lambda x, y: x  * y,L)
    
    prod([9,7,3,5])
    945
    def str2float(s):
        for i in range(len(s)):
            if s[i]=='.':
                break
        m=reduce(lambda x,y:x*10+y,map(int,s[0:i]))
        n=reduce(lambda x,y:x*0.1+y,map(int,s[:i:-1]))
        return m+n*0.1
    str2float('123.45467')123.45467

     2、filter

    Python内建的filter()函数用于过滤序列。

    map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

    过滤,生成一个新的序列

    def zhishu(k):
        return lambda x:x%k>0          #过滤掉可以被k整除的数,k=2,3,5...不断调用下一个,可用next()
    
    def f(n):
        it=(x+1 for x in range(1,n))    #生成一个从2开始的generator
        while True:                            #循环
            k=next(it)                         #从2开始调用,it的数减掉k
            yield k                              #返回k
            it=filter(zhishu(k),it)         #过滤后只剩下不能被2整除的数,第一个数变3....
    
    m=f(10)                                #输出由k组成的generator
    for i in m:
        print(i)                 
    def huishu(a):
        for i in range(len(a)):
            return len(a)==1 or a[i]==a[-i-1]
    
    def ff(n):
        L=[str(i) for i in range(1,n+1)]         
        m=filter(huishu,L) 
        print(list(m))

     3、sorted

     sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序

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

     

  • 相关阅读:
    【Java】抽象类、接口
    【Java】封装、继承、多态
    【Java】WrapperClass 包装类
    【Java】步入OOP 面向对象
    【MySQL】Windows8.0.19 解压版 下载安装
    【Java】05 Variable 变量
    【MySQL】更改root根用户密码 和 SQLyog安装
    LOJ2033.[SDOI2016]生成魔咒 (后缀自动机)
    HDU4641 Kstring (后缀自动机+线段树合并)
    HDU5853 Jong Hyok and String (广义后缀自动机)
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12623781.html
Copyright © 2011-2022 走看看