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
猜你喜欢
- 1. Shared and Exclusive Locksshared lock (译:共享锁)exclusive lock (
- Dim iSet conn=Server.CreateObject("ADODB.Connecti
- 在 Go语言中通过调用 reflect.TypeOf 函数,我们可以从一个任何非接口类型的值创建一个 reflect.Type 值。refl
- Python的zip函数示例1:x = [1, 2, 3]y = [4, 5, 6]z = [7, 8, 9]xyz = zip(x, y,
- 本文记录了mysql 8.0.17 安装配置的图文教程,供大家参考,具体内容如下1.下载安装包下载地址:安装包2.解压安装包到目录这里解压到
- MySQL5.7版本开始支持JSON格式,在创建表时,可以指定列表的数据类型为JSON,但是如何在JSON格式上创建索引呢??本人做了一个简
- 视频才用流媒体,有后台实时返回数据, 要支持flash播放, 所以需安装对应的flash插件。当视频播放时,每间隔3秒向后台发送请求供检测心
- 概念单元测试 UT测试,针对程序来进行正确检测测试工作,一个优秀强壮代码 需要有完美的 UT测试用例go test基本用法go test 测
- 主要讲 except 和 not in 的性能上的区别。 CREATE TABLE tb1(ID int) CREATE TABLE tb2
- 不用说火爆一时,全网热议的Web3.0区块链技术,也不必说诸如微信支付、支付宝支付等人们几乎每天都要使用的线上支付业务,单是一个简简单单的注
- 前言对MySQL表的基本查询还远远达不到实际开发过程中的需求,因此还需要掌握对数据库表的复合查询。本文介绍了多表查询、子查询、自连接、内外连
- 前言print()函数用来将信息输出到控制台如果希望输出文字信息的同时,一起输出数据,可以使用格式化操作符%,格式化操作符负责处理字符串中的
- 今天,使用各种所见即所得工具制作主页已经是一件非常容易的事情了。但是了解HTML源代码和语法,无疑对我们制作主页有更大的帮助,也可以使用户能
- 具体代码如下所示:#!/usr/bin/python# coding=utf-8from ftplib import FTPimport t
- 需要把ip地址转换为10进制数,然后也可以把10进制数转化为ip地址,计算机ping这个十进制数可以ping通对应的ip地址,说明已经实现功
- 一、推理原理1.先去《英雄联盟》官网找到英雄及皮肤图片的网址:lol.qq.com2.从上面网址可以看到所有英雄都在,按下F12查看源代码,
- 大家好,由于公司忙着赶项目,导致有段时间没有发布新文章了。今天我想跟大家谈谈Cookie的使用。同样,这个Cookie的使用方法是我从公司的
- 本文实例为大家分享了js图片加载淡入淡出效果展示的具体代码,供大家参考,具体内容如下HTML代码首先是图片标记的写法:<img dat
- 前言:有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上。那么这个音乐高潮的提取能不能自动化呢?当然可以。先来
- PyQt5布局控件QFormLayout简介QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表