【Python函数与模块】(21)常用的高阶函数(filter,map,reduce)
写在前面:lambda函数是一种表达式,创建内嵌的简单匿名函数
1. filter函数
返回一个filter对象,其中包含对其执行函数时结果为真的所有元素
filter(func, seq)
def use_filter(l): """ 获取指定列表/元组中的奇数 :param l: list/tuple 要过滤的数据 :return: 过滤好的奇数列表 """ res = filter(lambda n: n % 2 != 0, l) return res if __name__ == "__main__": lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] rest = use_filter(lst) # print(rest) # 输出:<filter object at 0x000001FA42A57548> print(list(rest)) # 输出:[1, 3, 5, 7, 9, 11]
2. map函数
创建一个列表,其中包含指定序列包含的项执行指定函数的返回值
map(func, seq, ...)
def pow_number(l): """ 根据指定的列表数据,计算每一项的立方 :param l: list/tuple 列表或者元组 :return: 原列表/元组中每一项的立方 """ rest_list = [] for x in l: rest_list.append(x * x * x) return rest_list def pow_number_use_map(l): """ 使用map函数计算给定列表中每一项的立方 :param l: list/tuple 列表或者元组 :return: 原列表/元组中每一项的立方 """ return map(lambda n: n * n * n, l) if __name__ == "__main__": lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] # print(pow_number(lst)) rest = pow_number_use_map(lst) # print(rest) # 输出:<map object at 0x00000226316566C8> print(list(rest))
3. reduce函数
使用指定函数将前两个元素合二为一,再将结果与第3个元素合二为一,以此类推,直到处理完整个序列并得到一个结果
reduce(func, seq[, initial])
等价于:func(func(func(seq[0], seq[1]), seq[2]), ...)
实现递归的效果
from functools import reduce def get_sum(l): """ 根据给定列表,求每项加起来的和 :param l: 里面是整数 :return: 所有项的和 """ rest = 0 for i in l: rest += i return rest def get_sum_use_py(l): """ 使用内置方法:根据给定列表,求每项加起来的和 :param l: 里面是整数 :return: 所有项的和 """ return sum(l) def get_sum_use_reduce(l): """ 使用reduce方法:根据给定列表,求每项加起来的和 :param l: 里面是整数 :return: 所有项的和 """ return reduce(lambda m, n: m + n, l) if __name__ == "__main__": lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] print(get_sum(lst)) print("-----------") print(get_sum_use_py(lst)) print("-----------") print(get_sum_use_reduce(lst))