zoukankan      html  css  js  c++  java
  • 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!'))




  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/timssd/p/8035386.html
Copyright © 2011-2022 走看看