Python中的map、filter、reduce函数应用案例分析
在Python中,map、filter、reduce 是非常常用的三个函数。map 函数可以将一个函数映射到一个序列,filter 函数可以通过一个函数来确定序列中的哪些元素符合条件,reduce 函数可以对一个序列中的元素进行累积。这三个函数可以在Python中很多场景下都被使用。下面就介绍一下 Python 中的 map、filter、reduce 函数的具体应用案例。
一、Map函数应用案例
1. 将列表中的元素转为字符串类型
lst = [1,2,3,4,5] res = list(map(str,lst)) # 将lst中的元素转为字符串类型 print(res)
输出结果如下:
['1', '2', '3', '4', '5']
2. 使用 lambda 表达式将列表中的元素进行平方
lst = [1,2,3,4,5] res = list(map(lambda x:x**2,lst)) # 使用 lambda 表达式将列表中的元素进行平方 print(res)
输出结果如下:
[1, 4, 9, 16, 25]
3. 使用 map 函数将多个列表对应位置的元素相加
lst1 = [1,2,3,4,5] lst2 = [5,4,3,2,1] res = list(map(lambda x,y:x+y,lst1,lst2)) # 使用 map 函数将多个列表对应位置的元素相加 print(res)
输出结果如下:
[6, 6, 6, 6, 6]
二、Filter函数应用案例
1. 使用 filter 函数获取列表中的所有偶数
lst = [1,2,3,4,5,6,7,8,9] res = list(filter(lambda x:x%2==0,lst)) # 使用 filter 函数获取列表中的所有偶数 print(res)
输出结果如下:
[2, 4, 6, 8]
2. 使用 filter 函数获取字符串列表中长度大于3的字符串
lst = ['apple','banana','pear','orange','watermelon'] res = list(filter(lambda x:len(x)>3,lst)) # 使用 filter 函数获取字符串列表中长度大于3的字符串 print(res)
输出结果如下:
['apple', 'banana', 'pear', 'orange', 'watermelon']
但是输出结果中为什么会有所有字符串呢?原因是 Python 中的空字符串也算作长度为0的字符串,所以需要再加一层判断:
lst = ['apple','banana','pear','orange','watermelon',''] res = list(filter(lambda x:len(x)>3 and x, lst)) print(res)
这里通过 and 运算符将长度判断和空字符串判断结合起来,过滤掉长度小于等于3的字符串和空字符串。输出结果如下:
['apple', 'banana', 'pear', 'orange', 'watermelon']
三、Reduce函数应用案例
1. 使用 reduce 函数计算列表中所有元素的和
from functools import reduce lst = [1,2,3,4,5] res = reduce(lambda x,y:x+y,lst) # 使用 reduce 函数计算列表中所有元素的和 print(res)
输出结果如下:
15
2. 使用 reduce 函数计算阶乘
from functools import reduce n = 5 res = reduce(lambda x,y:x*y,range(1,n+1)) # 使用 reduce 函数计算阶乘 print(res)
输出结果如下:
120
这个例子中利用 lambda 函数和 reduce 函数,将 range(1,n+1) 中的每个元素递归计算,得出 n 的阶乘。
综上,map、filter、reduce 是 Python 中非常常用的三个函数,可以大大简化编程过程,并且在实现某些功能时也颇具优势。上述案例也展示了这三个函数的灵活性,希望能够对大家在日常编程中的学习有所帮助。
