高阶函数map,filter,reduce及lambda表达式

    技术2024-11-17  11

    高阶函数及lambda表达式

    高阶函数

    fiter(),zip(),map(),reduce()

    name=['milo','zou','tom'] age=[20,30,40] tel=['133','159','189']

    现在让3个list列表相关联,用zip(name,age,tel),在用zip并行遍历时,3个列表中的元素是一样多的,如果元素个数不同,会按照最短原则配对(木桶短板)截断

    zip()

    >>> list(zip(age,name,tel)) [(20, 'milo', '133'), (30, 'zou', '159'), (40, 'tom', '189')] >>> zip(name,age,tel) [('milo', 20, '133'), ('zou', 30, '159'), ('tom', 40, '189')] >>> hobby=['football','baskteball'] >>> zip(name,age,tel,hobby) [('milo', 20, '133', 'football'), ('zou', 30, '159', 'baskteball')]

    map()

    map()函数还可以将函数func传递为形参,对遍历后的列表进行额外计算操作

    >>> a=[1,3,5] >>> b=[2,4,6] >>> c=[2,4,6] >>> def mf(x,y,z): return x*y*z >>> map(mf,a,b,c) [2, 12, 30]

    reduce()

    阶乘操作 reduce()可以更简单的实现递归

    case1 >>>n=0 >>> for i in range(100): n+=i print(n) 可以看出这种方式比较笨 case2 利用reduce()函数的特性 >>> def sum(x,y): return x+y >>> reduce(sum,range(10)) 45 >>> reduce(sum,range(100)) 4950 >>> reduce当然还支持lambda 匿名函数 reduce(lambda x,y:x+y,range(100)) >>> reduce(lambda x,y:x+y,range(100)) 4950

    filter()

    filter()函数同样也支持这样用法

    >>> filter(lambda x:x%2,range(15)) [1, 3, 5, 7, 9, 11, 13] >>>

    lambda表达式(匿名函数)

    简单用例

    foo=[2,18,9,22,17,24,8,13,27] print filter(lambda x:x%3==0,foo) print map(lambda x:x*2+10,foo) print reduce(lambda x,y:x+y,foo)
    Processed: 0.024, SQL: 9