python内置函数map/filter/reduce详解

 更新时间:2024年05月29日 14:27:18   作者:科雷软件测试  
在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素,这篇文章主要介绍了python内置函数map/filter/reduce的相关知识,需要的朋友可以参考下

      在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素。这些函数通常与lambda函数一起使用,以简洁地表达常见的操作。下面我将分别解释这三个函数。

1. map()函数

map() 函数将一个函数应用于一个或多个可迭代对象的每个元素,并返回一个迭代器,该迭代器包含函数应用于每个元素的结果。

以下是builtins.map的源码:__init__()函数可以看出需要传入一个函数func和至少一个可迭代对象。

map(function, iterable, ...)

  • function:接收一个或多个参数的函数。
  • iterable:一个或多个可迭代对象,如列表、元组、字符串等。

注意事项:

  • map() 函数返回的是一个迭代器,如果你需要一个列表或其他可迭代对象,你需要使用 list() 或其他相应的函数来转换它。
  • 当使用 map() 函数时,请确保传递给它的函数能够正确地处理可迭代对象的元素。如果函数引发异常,则 map() 将停止迭代。

示例

传入一个可迭代对象

#通过map函数 返回经过平方计算后的结果
value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value1))
#结果
[1, 4, 9, 16, 25]

传入多个可迭代对象

#通过map函数 返回两个可迭代对象中每个对应位置元素的乘积平方
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5],(2,4,6,8,10))
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value2))
#结果
[2, 8, 18, 32, 50]

但是注意传入的元素个数与lambda需要的参数个数要一致,否则会报错

比如上面的例子我们只传入一个迭代对象,程序执行后会报错

value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5])
print(list(value2))
#结果报错
TypeError: <lambda>() missing 1 required positional argument: 'y'

2. filter()

filter() 函数使用一个函数作为条件,并返回一个迭代器,该迭代器包含所有使该函数返回True的可迭代对象的元素。

以下是builtins.filter的源码:__init__()函数可以看出需要传入一个函数func和一个可迭代对象。

filter(function, iterable)

  • function:一个函数,它接受一个参数并返回一个布尔值。
  • iterable:一个可迭代对象,如列表、元组、字符串等。

示例

传入一个可迭代对象,使用lambda函数获取被2整除的数

numbers = [10, 3, 9, 8, 6]
filternumbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filternumbers))
#结果
[10, 8, 6]

3. reduce()

reduce() 函数将一个二元操作符(或函数)连续地应用于一个可迭代对象的元素,从而将其减少为单个值。python3的版本reduce() 函数在Python的functools 模块中,使用时需要先导入。

reduce(function, sequence, initial=_initial_missing)

  • function:该函数接受两个参数并返回一个值。
  • sequence:一个可迭代对象,如列表、元组等。
  • initial(可选):传入该值表示操作的初始值。如果保持默认值,则使用可迭代对象的第一个元素作为初始值。

示例

1) 将可迭代对象的值相加

from functools import reduce
numbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers)
print(sumnumbers) 
# 输出: 15

当然像上面这种简单的例子,用sum(numbers)函数更简单。

2) 传入1个初始值作为第1个元素

from functools import reduce
numbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers) 
# 输出: 21

到此这篇关于python内置函数map/filter/reduce详解的文章就介绍到这了,更多相关python内置函数map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python用20行代码实现批量抠图功能

    Python用20行代码实现批量抠图功能

    在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦。本文将为大家分享一个20行代码就能实现是批量抠图,需要的可以参考一下
    2022-05-05
  • Python环境使用OpenCV检测人脸实现教程

    Python环境使用OpenCV检测人脸实现教程

    这篇文章主要介绍了Python环境使用OpenCV检测人脸实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python如何实用File文件的实现

    Python如何实用File文件的实现

    本文主要介绍了Python如何实用File文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python学习之Django的管理界面代码示例

    Python学习之Django的管理界面代码示例

    这篇文章主要介绍了Python学习之Django的管理界面代码示例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python颜色随机生成器的实例代码

    python颜色随机生成器的实例代码

    这篇文章主要介绍了python颜色随机生成器的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • PyTorch高级教程之自定义模型、数据加载及设备间数据移动

    PyTorch高级教程之自定义模型、数据加载及设备间数据移动

    在深入理解了PyTorch的核心组件之后,我们将进一步学习一些高级主题,包括如何自定义模型、加载自定义数据集,以及如何在设备(例如CPU和GPU)之间移动数据,需要的朋友可以参考下
    2023-07-07
  • matplotlib.subplot()画子图并共享y坐标轴的方法

    matplotlib.subplot()画子图并共享y坐标轴的方法

    Matplotlib的可以把很多张图画到一个显示界面,本文主要介绍matplotlib.subplot()画子图并共享y坐标轴的方法,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 深入理解Python中装饰器的用法

    深入理解Python中装饰器的用法

    装饰器的使用是Python的高级技巧之一,通过Decorator装饰器能够带来函数式编程中所需的很多特性,这里我们就来跟随文章一同深入理解Python中装饰器的用法,需要的朋友可以参考下
    2016-06-06
  • 使用TensorFlow实现简单线性回归模型

    使用TensorFlow实现简单线性回归模型

    这篇文章主要为大家详细介绍了使用TensorFlow实现简单线性回归模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Python实现自动合并Word并添加分页符

    Python实现自动合并Word并添加分页符

    这篇文章主要为大家详细介绍了如何基于Python实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的功能,感兴趣的可以了解一下
    2023-02-02

最新评论