Python高阶函数:map、filter和reduce的用法及应用
Python语言中的高阶函数:map、filter和reduce,是运用广泛的函数之一,它们可以简化代码量,提高程序的效率。本文将详细介绍这三个高阶函数的用法及其应用。
一、map函数
map函数是Python内置的函数,其作用是将一个可迭代对象的每个元素都进行相同的操作,返回对应的新的迭代器。
map()函数的语法如下:
map(function, iterable, ...)
其中,function是一个自定义函数,iterable是可迭代对象。map()函数将function函数作用于iterable可迭代对象中的每个元素,并返回一个map对象。
例如,我们将列表中的数字全部转换为字符串:
>>> num_list = [1, 2, 3, 4, 5] >>> str_list = map(str, num_list) >>> print(list(str_list)) ['1', '2', '3', '4', '5']
我们也可以使用lambda表达式来实现:
>>> num_list = [1, 2, 3, 4, 5] >>> str_list = map(lambda x:str(x), num_list) >>> print(list(str_list)) ['1', '2', '3', '4', '5']
二、filter函数
filter函数也是Python内置的函数,其作用是从序列中过滤出符合条件的元素,并返回一个新的序列。
filter()函数的语法如下:
filter(function, iterable)
其中,function是一个自定义函数,iterable是可迭代对象。filter()函数将function函数作用于iterable可迭代对象中的每个元素,并返回一个包含符合条件元素的迭代器。
例如,我们可以筛选出列表中的偶数:
>>> num_list = [1, 2, 3, 4, 5] >>> even_list = filter(lambda x:x%2==0, num_list) >>> print(list(even_list)) [2, 4]
三、reduce函数
reduce函数是Python内置的函数,它是Python 2中的内建函数,在Python 3中需要通过引入functools模块来使用。reduce()函数的作用是对一个序列进行归纳计算,返回一个计算结果。
reduce()函数的语法如下:
reduce(function, iterable[, initial])
其中,function是一个自定义函数,iterable是可迭代对象,initial是可选参数。reduce()函数对于iterable中的元素,使用function函数进行归纳计算,并最终返回一个值。
例如,我们可以计算列表中所有元素之和:
>>> from functools import reduce >>> num_list = [1, 2, 3, 4, 5] >>> sum = reduce(lambda x,y:x+y, num_list) >>> print(sum) 15
在reduce()函数中使用initial参数,可以指定计算的初始值:
>>> from functools import reduce >>> num_list = [1, 2, 3, 4, 5] >>> sum = reduce(lambda x,y:x+y, num_list, 10) >>> print(sum) 25
四、应用案例
(1)map函数实现列表中所有元素的平方
>>> num_list = [1, 2, 3, 4, 5] >>> square_list = map(lambda x:x*x, num_list) >>> print(list(square_list)) [1, 4, 9, 16, 25]
(2)filter函数实现筛选出列表中大于平均数的元素
>>> num_list = [1, 2, 3, 4, 5] >>> avg = sum(num_list) / len(num_list) >>> new_list = filter(lambda x:x>avg, num_list) >>> print(list(new_list)) [4, 5]
(3)reduce函数实现阶乘
>>> from functools import reduce >>> num = 5 >>> factorial = reduce(lambda x,y:x*y, range(1, num+1)) >>> print(factorial) 120
综上所述,map、filter和reduce函数都是Python语言中非常实用的高阶函数,它们大大简化了代码量,提高了程序效率,应用广泛,我们一定要熟记它们的详细用法及应用。
