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

 

 

posted @ 2020-04-02 23:15  soberkkk  阅读(138)  评论(0编辑  收藏  举报