Python3中map()、reduce()、filter()的用法详解

作者:Python热爱者 时间:2024-01-03 01:27:23 

Python3中的map()、reduce()、filter() 这3个一般是用于对序列进行操作的内置函数,它们经常需要与 匿名函数 lambda 联合起来使用,我们今天就来学习下。

1.map()

map() 可以用于在函数中对指定序列做映射,返回值是一个迭代器,其使用语法如下:

map(function, *iterables)

上面的第一个参数 function 指一个函数,第二个参数 iterable 指一个或多个可迭代对象,在执行过程中,会对可迭代对象中的每一个元素调用 function 函数做计算,最后得到一个新的迭代器对象,而这个新的迭代器对象,会包含有每次调用 function 函数的返回值。

只传入一个可迭代对象

"""计算列表中每个元素的三次方"""
def demo_map(x):
   return x ** 3
nums = [1, 2, 3, 4, 5]
print(list(map(demo_map, nums)))  # 输出:[1, 8, 27, 64, 125]

# 使用匿名函数
print(list(map(lambda x: x ** 3, nums)))  # 输出:[1, 8, 27, 64, 125]

传入多个可迭代对象

"""计算3个列表中对应下标元素的和"""
def demo_map(x, y, z):
   return x + y + z
nums1 = [1, 2, 3, 4, 5]
nums2 = [11, 22, 33, 44, 55]
nums3 = [100, 200, 300, 400, 500]
print(list(map(demo_map, nums1, nums2, nums3)))  # 输出:[112, 224, 336, 448, 560]

# 使用匿名函数
print(list(map(lambda x, y, z: x + y + z, nums1, nums2, nums3)))  # 输出:[112, 224, 336, 448, 560]

2.filter()

filter() 可以用于过滤序列,过滤掉不符合条件的元素,返回值也是一个迭代器,其使用语法如下:

filter(function or None, iterable)

和 map() 函数类似,上面的第一个参数 function 指一个函数,第二个参数 iterable 指一个可迭代对象,执行后会得到一个包含每次调用 function 函数返回值的迭代器。

"""找出从 -5 到 5 中能被 4 整除的所有整数"""
def demo_filter(x):
   return x % 4 == 0

nums = range(-5, 6)
print(list(nums))  # 输出:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

# 传入None,只返回true的值(0是False,所以被过滤掉了)
print(list(filter(None, nums)))  # 输入:[-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]

# 传入正常函数,过滤出 nums 中能被 4 整除的整数
print(list(filter(demo_filter, nums)))  # 输出:[-4, 0, 4]

# 使用匿名函数
print(list(filter(lambda x: x % 4 == 0, nums)))  # 输出:[-4, 0, 4]

针对 map() 和 filter() 函数, 这里有 2 点需要注意:

  • map 中必须传入一个正常函数,而在 filter 函数中则可以传正常函数或者None,当传入None时,只返回可迭代对象中所有符合 true 的值

  • map 中支持传多个可迭代对象,而在 filter 函数中则只能传一个可迭代对象

3.reduce()

reduce() 可以用于对参数序列中的元素进行累积,返回的是一个值。

在 Python3 中,reduce() 已被从全局名字空间里移除了,如果想要使用它,那么需通过引入 functools 模块来调用 reduce() 函数,其使用语法如下:

from functools import reduce
reduce(function, sequence[, initial])

上面的第一个参数 function 指一个函数,并且该函数必须含有2个参数,第二个参数 sequence 指一个序列,第三个参数 initial 指初始值,默认是None。

例如存在函数:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),它就相当于 ((((1+2)+3)+4)+5)。

"""计算 1-100 所有整数之和"""
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from functools import reduce
def demo_reduce(x, y):
   return x + y
nums = range(1, 101)

print(reduce(demo_reduce, nums))  # 输出:5050
# 使用匿名函数
print(reduce(lambda x, y: x + y, nums))  # 输出:5050

# 设置初始值为 1000
print(reduce(lambda x, y: x + y, nums, 1000))  # 输出:6050

上面的 map()、reduce()、filter() 都是属于Python3中的高阶函数,它们最大的好处在于可以让代码更加简洁,当然,如果不使用它们,我们也可以通过其他方式来实现。

来源:https://blog.csdn.net/qdPython/article/details/126143564

标签:Python3,map(),reduce(),filter()
0
投稿

猜你喜欢

  • PHP使用自定义key实现对数据加密解密的方法

    2023-08-21 12:48:37
  • window10下mysql 8.0.20 安装配置方法图文教程

    2024-01-14 19:08:59
  • 教你自动恢复MySQL数据库的日志文件(binlog)

    2024-01-26 02:29:07
  • SQL Server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发现

    2024-01-13 02:40:08
  • pandas创建DataFrame对象失败的解决方法

    2022-06-23 17:12:54
  • Python获取百度热搜的完整代码

    2023-09-06 11:33:32
  • 非常简单的Python识别图片验证码实现过程

    2022-01-23 02:03:54
  • Python3 log10()函数简单用法

    2021-06-27 16:47:16
  • 详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)

    2023-12-23 17:05:09
  • pandas将多个dataframe以多个sheet的形式保存到一个excel文件中

    2022-11-06 02:24:01
  • python3 requests库实现多图片爬取教程

    2023-11-22 15:37:40
  • Vue实现导航栏菜单

    2024-05-09 15:18:06
  • Yii2结合Workerman的websocket示例详解

    2023-11-17 04:48:40
  • Mysql 乘法除法精度不一致问题(除法后四位小数)

    2024-01-13 09:44:16
  • tensorflow模型继续训练 fineturn实例

    2023-07-10 12:53:09
  • js的Prototype属性解释及常用方法

    2024-06-07 16:00:32
  • 浅谈Python的list中的选取范围

    2023-06-23 01:58:01
  • golang 对私有函数进行单元测试的实例

    2024-05-13 10:43:54
  • asp 各种进制转换函数

    2008-06-24 12:35:00
  • 区分有单选框的选项和普通的选项

    2008-04-17 13:44:00
  • asp之家 网络编程 m.aspxhome.com