zoukankan      html  css  js  c++  java
  • Python中的lambda、map和filter

    翻译、修改自https://medium.com/@happymishra66/lambda-map-and-filter-in-python-4935f248593

    1、lambda

    lambda运算符或lambda函数用来在Python中创建小的、一次性的匿名函数对象。

    基本语法如下:

    lambda arguments: expression

    lambda运算符可以有多个参数,但只能有一个表达式。它不能包含任何语句,它返回一个可以分配给任何变量的函数对象。

    例子1:

    add=lambda x,y:x+y

    add(2,3)

    #输出 5

    大多数lambda函数作为参数传递给一个函数,该函数需要一个函数对象作为参数,如map,reduce,filter函数

    2、map

    基本语法如下:

    map(function_object, iterable1, iterable2, ...)

    map函数需要一个函数对象和任意数量的iterables,如list,dictionary等。它为序列中的每个元素执行function_object,并返回由函数对象修改的元素列表。

    例子2:

    def multiply(x):

      return x*2

    list(map(multiply,[1,2,3,4]))

    #返回 [2,4,6,8]

    以上例子可以用map和lambda函数结合用一行写好:如下

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

    #输出 [2, 4, 6, 8]

     

    例子3:使用map和lambda在字典上迭代

    dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
      
    list(map(lambda x : x['name'], dict_a)) # Output: ['python', 'java']
      
    list(map(lambda x : x['points']*10,  dict_a)) # Output: [100, 80]
    
    list(map(lambda x : x['name'] == "python", dict_a)) # Output: [True, False]

    例子4:也可以传给map多个序列:

    ist_a = [1, 2, 3]
    list_b = [10, 20, 30]
      
    list(map(lambda x, y: x + y, list_a, list_b)) # Output: [11, 22, 33]

    以上不加list的话只能返回map对象,我们既不能使用索引访问map对象的元素,也不能使用len()来查找map对象的长度

    3、filter

    基本语法:
    filter(function_object, iterable)

    filter函数需要两个参数,function_object和iterable。 function_object返回一个布尔值。 为iterable的每个元素调用function_object,filter只返回function_object返回true的元素。

    像map函数一样,filter函数也返回一个元素列表。 与map函数不同,filter函数只能有一个iterable作为输入。
     
    例子5:
    a = [1, 2, 3, 4, 5, 6]
    list(filter(lambda x : x % 2 == 0, a)) # Output: [2, 4, 6]
    dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
    
    list(filter(lambda x : x['name'] == 'python', dict_a)) # Output: [{'name': 'python', 'points': 10}]

    与map类似,Python3中的filter函数返回一个filter对象或lazily evaluated的迭代器。 我们既不能使用索引访问filter对象的元素,也不能使用len()来得到filter对象的长度。

    -----------------------

    END

  • 相关阅读:
    工具类-vim在shell中卡死的情况
    tomcat日志分类
    逻辑运算
    牛客练习赛29 F 算式子
    牛客练习赛29 B
    查询
    hdu 5984
    zoj 4057
    zoj 4056
    zoj 4054
  • 原文地址:https://www.cnblogs.com/yanmk/p/9733538.html
Copyright © 2011-2022 走看看