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

     

  • 相关阅读:
    把git项目放到个人服务器上
    关于fcitx无法切换输入法的问题解决
    博客变迁通知
    (欧拉回路 并查集 别犯傻逼的错了) 7:欧拉回路 OpenJudge 数据结构与算法MOOC / 第七章 图 练习题(Excercise for chapter7 graphs)
    (并查集) HDU 1856 More is better
    (并查集 不太会) HDU 1272 小希的迷宫
    (并查集 注意别再犯傻逼的错了) HDU 1213 How Many Tables
    (最小生成树 Kruskal算法) 51nod 1212 无向图最小生成树
    (并查集) HDU 1232 畅通工程
    (最小生成树 Prim) HDU 1233 还是畅通工程
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12623781.html
Copyright © 2011-2022 走看看