python之lambda、filter、map、reduce的用法讲解

lambda:实现python中单行最小函数。

v = lambda x:x ** 2
#相当于
def v(x):
     return x ** 2
  • filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)。

filter(function or None, sequence) -> list, tuple, or string:入参为函数和列表/元组/字符串,返回值为item列表/元组/字符串

   filter 函数会对指定序列执行过滤操作,filter(function or None, sequence) -> filter object (list, tuple, or string in 2.x)
   filter 函数会对序列参数 sequence 中的每个元素调用 function 函数,最后返回的结果包含调用结果为True的元素

   注意:3.x 返回的是一个filter object (后续的函数map也是返回object),要加上list()等类型转换;而之前 2.x 版本的返回值类型和参数sequence的类型相同

import math
def is_sqr(x):
    return math.sqrt(x) % 1 == 0

newlist = filter(is_sqr, range(1,101))
print(list(newlist))
  • map(function, sequence) :对sequence中的item依次执行function(item),将执行结果function(item)组成一个List返回。

map(function, sequence[, sequence, ...]) -> list:入参是为函数和列表/元组/字符串,返回值为function(item)列表

  map 函数会对指定序列做映射操作,map(function or None, sequence) ->  map object (list, tuple, or string in 2.x)

  map 函数会对序列参数 sequence 中的每个元素调用 function 函数,返回的结果为每一个元素调用function函数的返回值

a =map(lambda x:x*x-4,range(10))
print(list(a))

结果 : [-4, -3, 0, 5, 12, 21, 32, 45, 60, 77]
  • reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。

reduce(function, sequence[, initial]) -> value:入参是为函数和列表/元组/字符串和初始值,返回值为数值

    注意:reduce 函数在 3.x 版本不是内建函数了,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里,用的话要 先引入

   from functools import reduce

from functools import reduce
def add(x,y):
    return x + y

print(reduce(add, range(1,100),0))

总结:

1、filter和map都是python内置的函数,可以直接调用,reduce在functools模块
2、要过滤删减序列用filter;要对多个序列做函数运算用map,reduce用得少。

原文地址:https://www.cnblogs.com/taoge007/p/9675701.html