• python的filter,reduce,map


    1.filter

    filter(func,iter)   只能处理一个参数(iter),仅仅将满足func方法的数值过滤出来
      如:
      a = [1,2,3,4,5]
      list(filter(lambda x:x>2,a))
      输出结果为: [3,4,5]
    map(func,iter1,iter2,..) 可以处理多个iter,实现通过func方法对iter1,iter2,..进行处理   

    2.reduce

    python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。如:

    def myadd(x,y):   
        return x+y   
    sum=reduce(myadd,(1,2,3,4,5,6,7))   
    print sum  

    #结果就是输出1+2+3+4+5+6+7的结果即28
    当然,也可以用lambda的方法,更为简单:

    sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))   
    print sum  

    3.map

    map是列表到列表,reduce是列表到值。

    from functools import reduce
    import math
    
    def format_name(s):
        return s.upper()
    
    def is_odd(x):
        return x % 2 == 1
    
    def sqr_integer(x):
        r = math.floor(math.sqrt(x))
        return x == r*r
    
    def f(x, y):
        return x + y
    # map 把函数 f 依次作用在 list 的每个元素上,得到一个 iterator并返回。 print(list(map(format_name, ['adam', 'LISA', 'barT']))) # reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。reduce()还可以接收第3个可选参数,作为计算的初始值。 print(reduce(f, [1, 3, 5, 7, 9], 100)) # filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的iterator。 print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))) print(list(filter(sqr_integer,range(100))))

    运行结果如下

    ['ADAM', 'LISA', 'BART']
    125
    [1, 7, 9, 17]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]




    Pythont特殊语法filter,map,reduce,apply使用方法

    投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 时间:2016-02-27 我要评论

    这篇文章主要介绍了Pythont特殊语法filter,map,reduce,apply使用方法,需要的朋友可以参考下

    (1)lambda

    lambda是Python中一个很有用的语法,它允许你快速定义单行最小函数。类似于C语言中的宏,可以用在任何需要函数的地方。

    基本语法如下:

    函数名 = lambda args1,args2,...,argsn : expression

    例如:

    1
    2
    add = lambda x,y : x + y
    print add(1,2)

    (2)filter

    filter函数相当于一个过滤器,函数原型为:filter(function,sequence),表示对sequence序列中的每一个元素依次执行function,这里function是一个bool函数,举例说明:

    1
    2
    3
    4
    sequence = [1,2,3,4,5,6,7,8,9,10]
    fun = lambda x : x % 2 == 0
    seq = filter(fun,sequence)
    print seq

    以下代码就是表示筛选出sequence中的所有偶数。

    filter函数原型大致如下:

    1
    2
    3
    4
    5
    6
    def filter(fun,seq):
        filter_seq = []
        for item in seq:
            if fun(item):
                filter_seq.append(item)
        return filter_seq

    (3)map

    map的基本形式为:map(function,sequence),是将function这个函数作用于sequence序列,然后返回一个最终结果序列。比如:

    1
    2
    3
    4
    seq = [1,2,3,4,5,6]
    fun = lambda x : x << 2
     
    print map(fun,seq)

    map的函数源代码大致如下:

    1
    2
    3
    4
    5
    def map(fun,seq):
        mapped_seq = []
        for item in seq:
            mapped_seq.append(fun(item))
        return mapped_seq

    (4)reduce

    reduce函数的形式为:reduce(function,sequence,initVal),function表示一个二元函数,sequence表示要处理的序列,而initVal表示处理的初始值。比如:

    1
    2
    3
    4
    seq = [1,2,3,4,5,6,7,8,9,10]
    fun = lambda x,y: x + y
     
    print reduce(fun,seq,0)

    表示从初始值0开始对序列seq中的每一个元素累加,所以得到结果是55

    reduce函数的源代码大致如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def reduce(fun,seq,initVal = None):
        Lseq = list(seq)
        if initVal is None:
            res = Lseq.pop(0)
        else:
            res = initVal
        for item in Lseq:
            res = fun(seq,item)
        return res

    (5)apply

    apply是用来间接地代替某个函数,比如:

    1
    2
    3
    4
    def say(a,b):
        print a,b
     
    apply(say,(234,'Hello World!'))




  • 相关阅读:
    【进阶3-5期】深度解析 new 原理及模拟实现(转)
    ios 手机端 input 框上方有内阴影
    手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间(转)
    xampp 搭建好本地服务器以后手机无法访问
    【进阶3-4期】深度解析bind原理、使用场景及模拟实现(转)
    阿里云播放器
    flex下部固定高,上部不固定,而且超过内容要滚动
    Vue项目笔记
    jQuery实现鼠标点击div外的地方div隐藏消失的效果(转)
    android WebView详细使用方法(转)
  • 原文地址:https://www.cnblogs.com/timssd/p/8035386.html
Copyright © 2020-2023  润新知