• 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函数返回的结果进行排序。

     

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12623781.html
Copyright © 2020-2023  润新知