10、Python_高阶函数map/reduce/filter/sorted

1、map的使用:

map()函数可以把传入的函数作用到传入的Iterable中的每一个元素。

例:f(x)=x2(平方),要把这个函数作用在一个list[1,2,3,4,5,6,7,8,9]

def f(x):

    return x*x

r=map(f,[1,2,3,4,5,6,7,8,9])

2、reduce的用法:

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

例1:对一个序列求和

from functools import reduce

扫描二维码关注公众号,回复: 4774704 查看本文章

def add(x+y):

    return x+y

reduce(add,[1,2,3,45,5,6,7,8])

例2:将字串转成int

原始版本->

from functools import reduce

def fn(x,y):

    return x*10+y

reduce(fn,[1,3,5,7,9])

近代版本->

from functools import reduce

def fn(x,y):

    return x*10+y

def char2num(s):

    digits ={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}

    return didits[s]

reduce(fn,map(char2num,'13467'))

现代版本->

from functools import reduce

DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}

def str2int(s):

    def fn(x,y):

        return x*10+y

    def char2int(c):

        return DIGITS[c]

    return reduce(fn,map(char2int,s))

未来超级版本->

from functools import reduce

DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}

def char2num(s):

    return DIGITS[s]

def str2int(s):

    return reduce(lambda x,y:x*10+y,map(char2num,s))

3、filter用法:

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

例:删除list中偶数,只留下奇数

def is_odd(n):

    return n%2 ==1

list(filter(is_odd,[1,2,4,5,6,7,8,9,32]))

4、sorted的用法:

sorted用于排序

例1:简单排序

sorted([35,22,-44,54,234,4,65,224])

例2:接收一个key函数来实现自定义排序

sorted([35,22,-44,54,234,4,65,224],key=abs)

按绝对值来排序

例3:对字符串排序

sorted(['bob','jack','Rose','City'],key=str.lower,reverse=True)

这里先将字串变成小写,再反向排序

猜你喜欢

转载自blog.csdn.net/qiangzai110110/article/details/85244710