Python中lambda map reduce filter函数

Python实用的内置函数

Python内置了一些比较特殊又实用的函数,使用这些函数能使你的代码简洁易读

记录一些函数 lambda map reduce filter 做笔记

匿名函数 lambda

匿名函数实例如下

1
2
3
4
In [1]: summation = lambda x,y: x+y # 定义匿名函数

In [2]: summation(2, 3) # 调用匿名函数
Out[2]: 5
  • lambda语句中, lambda是关键词,冒号之前的参数以逗号隔开,之后是表达式,lambda会返回表达式的结果

  • lambda是一个表达式,用来编写简单的函数

    • 省去函数定义过程,快速定义单行的函数,让代码更加精简

    • 无需复用的函数,省去函数名称

    • 可以和map reduce filter结合使用

映射函数 map

map函数接收一个函数func和一个可迭代对象iterate, 把函数func依次作用与iterate的每个元素, 把func返回值重新组成新的iterate并返回

1
2
3
4
5
In [3]: map(lambda x: x*2, range(10)) # range(10)中每个元素乘2
Out[3]: <map at 0x26f7cec37b8> # 返回的是可迭代对象

In [4]: list(_)
Out[4]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Python3中返回的是可迭代对象而不是列表

函数 reduce

Python3中需要从functools导入

reduce函数接收2个参数一个是函数func, 一个是可迭代对象iterate, func是一个接收2个参数的函数,reduce依次从iterate中取出一个元素,和上次调用func的结果做参数再次调用func

1
2
3
4
5
6
7
In [5]: from functools import reduce # 导入reduce函数

In [6]: reduce(lambda x,y: x+y, range(10)) # 求和 range(10)
Out[6]: 45

In [7]: sum(range(10)) # 使用求和函数
Out[7]: 45

reduce可以接收第一次计算的初始值 initial在取出iterate中第一个元素时,与initial一起传入func

reduce(function, sequence[, initial]) -> value

函数 filter

filter函数对可迭代对象做过滤操作,也有2个参数, 一个返回布尔值的func 和 一个可迭代对象iterate

filter(function or None, iterable) --> filter object

filter函数对每个iterate元素调用func方法,若返回结果为True则保留该元素,否则丢弃

1
2
3
4
5
In [8]: filter(lambda x: x%2==0, range(10)) # 取range(10)中的偶数
Out[8]: <filter at 0x26f7e0cb5c0> # 返回filter object 可迭代对象

In [9]: list(_)
Out[9]: [0, 2, 4, 6, 8]

练习

  1. Python内置了求和函数sum,请用reduce写一个求积函数
1
2
In [12]: reduce(lambda x,y: x*y, range(1,10))
Out[12]: 362880

2.使用filter过滤出100以内平方根整除的数

1
2
3
4
5
6
7
In [13]: import math

In [14]: filter(lambda x: math.sqrt(x)%1==0, range(1, 101))
Out[14]: <filter at 0x26f7e0e7710>

In [15]: list(_)
Out[15]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
updatedupdated2018-01-102018-01-10