zoukankan      html  css  js  c++  java
  • python——lambda,filter,map,reduce

    lambda函数

    使用方法:lambda [arg1[,arg2,arg3,...,argn]] : expression

    如:

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

    结果为1+2=3

    filter函数

    filter(bool_func,seq)

    此函数的功能相当于过滤器,通过返回值为bool的函数bool_func来迭代遍历seq中的每个元素;

    结果返回一个seq中使bool_func返回值为true的元素的序列。

    filter(lambda x : x%2 == 0,[1,2,3,4,5])  

    结果为[2,4],即1~5中可以被2整除的数为2和4

    filter的内部实现如下:

    def filter(bool_func,seq):  
        filtered_seq = []  
        for eachItem in seq:  
            if bool_func(eachItem):  
                filtered_seq.append(eachItem)  
        return filtered_seq

    map函数

    map(function, seq[..., seq, ...]) -> list

    第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。

    map(lambda x: x ** 2, [1, 2, 3, 4, 5])

    返回结果为:[1, 4, 9, 16, 25]

    在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。

    比如要对两个序列中的元素依次求和。

    map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

    返回结果为:[3, 7, 11, 15, 19]

    要注意function函数的参数数量,要和map中提供的集合数量相匹配。

    如果集合长度不相等,会以最小长度对所有集合进行截取。

    当函数为None时,操作和zip相似:

    map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

    返回结果为:

    [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

     

    reduce函数

    reduce(func, seq[], initial) -> value

    func是一个有两个参数的函数,reduce依次从seq中取一个元素,和上一次调用func的结果做参数再次调用func。

    initial为可选参数,如果提供该参数,则func第一次会用intial和seq中得第一个元素作为参数,否则用seq中的第一个和第二个元素作为参数

    reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)

    结果为21,即(((((1+2)+3)+4)+5)+6)

    reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])

    结果为20,即(((2+3)+4)+5)+6)

    注:reduce中得func不能为None

     

     
  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/licheng127/p/3793314.html
Copyright © 2011-2022 走看看