【python基础】—函数式编程三个基本函数map()/filter()/reduce()

文章目录

  • 前言
  • 一、map()函数
  • 二、filter()函数
  • 三、reduce()函数


前言

map()、filter()、reduce()是python内置函数,它们提供了一种便捷的方式来处理可迭代对象中的元素,这些函数在许多编程任务中非常有用,包括数据转换,筛选和累积操作,熟练掌握这些函数的使用方式可以让python编程更加高效和简洁。
本文主要介绍三个基本函数:map()、filter()、reduce()的用法。


一、map()函数

  • map(function,iterable,…)

用于将一个函数应用到可迭代对象(如列表、元组等)的每个元素上,然后返回一个包含结果的新可迭代对象。

参数 描述
function 要应用于可迭代对象的函数。
iterable 要进行映射操作的可迭代对象。

map()函数可以接受多个可迭代对象,但每个可迭代对象的元素必须一致,它将function应用于可迭代对象的对应元素,并返回一个迭代器,其中包含了所有映射后的结果。

举例1:将列表中的元素转为大写。

words=['abc','nju']
#list(map(upper,words)) #报错,更正
list(map(lambda word:word.upper(),words))
# 输出:
# ['ABC', 'NJU']

# string.upper()函数被应用到words列表的每个元素上,将它们转为大写形式。

举例2:将列表中的元素乘以2。

lst=[3,2,5,8,1]
list(map(lambda x:x*2,lst))

# 输出:
# [6, 4, 10, 16, 2]

举例3:将列表中的元素字符串类型转变为数值型。

lst=['12', '3.4', '567']
lst1=list(map(eval,lst))
print(lst1)

# 输出:
# [12, 3.4, 567]

二、filter()函数

  • filter(function,iterable,…)

用于筛选可迭代对象中满足指定条件的元素,然后返回一个包含筛选结果的可迭代对象。

参数 描述
function 用于筛选元素的函数。该函数返回True或False。
iterable 要进行筛选操作的可迭代对象。

filter()函数将function应用于iterable中的每个元素,并保留那些使function返回True的元素,生成一个包含筛选结果的迭代器。

举例1:筛选出偶数。

lst=[3,2,5,8,1]
list(filter(lambda x:x%2==0,lst))

# 输出:
# [2, 8]

在上面这个例子中,lambda函数用于检查每个元素是否为偶数,然后filter()函数筛选出了所有满足条件的元素。

举例2:筛选出长度大于等于5的字符串

words=['hello','sodagreen','world','tomorrow','you','will']
long_words=list(filter(lambda words:len(words)>=5,words))
print(long_words)

# 输出:
# ['hello', 'sodagreen', 'world', 'tomorrow']

三、reduce()函数

  • reduce(function, iterable[, initializer])

reduce()函数用于可迭代对象中的元素进行累积操作,从左到右依次应用指定的函数,将结果汇总为一个值,这在某些情况下非常有用,例如计算累积或查找最大/最小值。

参数 描述
function 用于累积操作的函数。该函数接受两个参数,并返回一个结果。
iterable 要进行累积操作的可迭代对象。
initializer 可选,累积的初始值。

reduce()函数将function应用于iterable中的元素,从左到右依次累积,将结果传递给下一个元素,如果提供了initializer,它将作为累积的初始值,否则iterable的第一个元素作为初始值。

举例1:计算列表中所有元素的和

from functools import reduce

lst=[1,2,3,4,5]
reduce(lambda x,y:x+y,lst)

举例2:计算列表中所有元素的累积乘积

from functools import reduce

lst=[1,2,3,4,5]
reduce(lambda x,y:x*y,lst)

举例3:查找列表中的最大值。

from functools import reduce

lst=[123,12,456,789]
reduce(lambda x,y:x if x>y else y,lst)

参考文档:
https://zhuanlan.zhihu.com/p/662737346

你可能感兴趣的:(python基础,python,数据库,开发语言)