#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/3/14 20:48 # @Author : banzhu # @File : map-filter-reduce.py # map():对可迭代对象中的每个元素,都调用指定的函数,并返回一个 map 对象 # 基本语法格式:map(function, iterable) # function 参数表示要传入一个函数,其可以是内置函数、自定义函数或者 lambda 匿名函数; # iterable 表示一个或多个可迭代对象,可以是列表、字符串等。 # 返回的是一个 map 对象,不能直接输出,可以通过 for 循环或者 list() 函数来显示 x = [1,2,3,4,5] y = [2,3,4,5,6] new_list = map(lambda x,y:(x*y)+2,x,y) print(list(new_list)) # 输出结果为:[4,8,14,22,32] # 也可以这样写 new_list = list(map(lambda x,y:(x*y)+2,x,y)) # print(new_list) # 以上可以理解为,调用x,y两个可迭代对象(列表)内的每一个对应位置的参数,通过(x*y)+2的表达式来进行计算 # 最后通过list()函数把计算出的值转换成列表形式进行输出 # filter():对可迭代对象中的每个元素,都使用funcition函数判断,并返回True或者False,最后将返回True的元素组成一个新的可遍历的集合。 # 基本语法格式:filter(function, iterable) x = [1,2,3,4,5] new_list = list(filter(lambda x:x%2==0,x)) # 找出偶数。python3.*之后filter函数返回的不再是列表而是迭代器,所以需要用list转换。 print(new_list) # reduce(): 对一个列表进行计算并返回结果 # 语法格式:reduce(function, iterable) # function 规定必须是一个包含 2 个参数的函数 # 由于 reduce() 函数在 Python 3.x 中已经被移除,放入了 functools 模块,因此在使用该函数之前,需先导入 functools 模块 from functools import reduce y = [2,3,4,5,6] reduce(lambda x,y: x + y,y) # 直接返回一个值 # 先计算头两个元素:f(2, 3),结果为5; # 再把结果和第3个元素计算:f(5, 4),结果为9; # 再把结果和第4个元素计算:f(9, 5),结果为14; # 再把结果和第5个元素计算:f(14, 6),结果为20; # 由于没有更多的元素了,计算结束,返回结果20。