适当的使用在Python里的4个内置函数lambda, map, reduce, filter可以使程序变得非常简单易读
lambda运算符
函数形式:
1
lambda argument_list: expression
用lambda开头,然后加上所有需要在函数中使用的元素,中间用逗号隔开。元素后面加冒号,冒号后面加上函数体。
1
2sum = lambda x, y : x + y
sum(3,4)
7
map()函数
如果把map和lambda结合使用在一起,可以使函数的定义变得更加方便。
函数形式如下:
1
r = map(func, seq)
简单来讲,map函数就是把定义的函数func运用到seq里的每一个元素上。Python2里的map函数直接返回一个list,Python3里的map函数返回一个迭代器,所以如果想要一个数列,要用list()转换迭代器结果。
1
2
3
4# 摄氏度变华氏度
C = [39.2, 36.5, 37.3, 38, 37.8]
F = list(map(lambda x: (float(9)/5)*x + 32, C))
print(F)
[102.56, 97.7, 99.14, 100.4, 100.03999999999999]
map()函数可以应用到多于一个列表上。每个列表的长度必须一样才能应用到map()函数里,过程是先把函数应用到每个列表的第一个元素上,然后每个列表的第二个元素上,以此类推。
1
2
3
4a = [1,2,3,4]
b = [17,12,11,10]
list(map(lambda x,y:x+y, a,b))
[18, 14, 14, 14]
filter()函数
filter()函数提供了一种可以方便过滤掉一个数列中不需要的元素的形式。其中的function是一个描述过滤条件的函数,返回值是true或false。过程也是把function函数应用到sequence里的每一个元素上,如果function函数返回true,则这个元素会被去掉。
函数形式如下:
1
filter(function, sequence)
1
2
3fibonacci = [0,1,1,2,3,5,8,13,21,34,55]
odd_numbers = list(filter(lambda x: x % 2, fibonacci))
print(odd_numbers)
[1, 1, 3, 5, 13, 21, 55]
reduce()函数
正如它的名字,reduce函数将减少数列中的元素个数。func是有两个输入,返回一个值得函数。
函数形式如下:
1
reduce(func, seq)
如果seq= [ s1, s2, s3, ... , sn ],使用reduce(func, seq)过程如下:
- 第一步先将func运用到数列里前两个元素上[ func(s1, s2), s3, ... , sn ]
- 第二步将func运用到第一步的结果和数列里前三个元素上[func(func(s1, s2),s3), ... , sn ]
- 以此类推,直到最后只输出一个元素
1
2import functools
functools.reduce(lambda x,y: x+y, [47,11,42,13])
113
另外一个例子
1
2
3from functools import reduce
f = lambda a,b: a if (a > b) else b
reduce(f, [47,11,42,102,13])
102
参考文献
[1]. Python 3 Tutorial https://www.python-course.eu/python3_lambda.php