Python高阶函数map() 简介和使用详解
作者:Python欧尼酱 发布时间:2021-04-03 04:34:11
简介:
格式:
map(function,iterable,……)
参数说明:
function:是表示函数功能
iterable:是表示可迭代对象 ,后面可以跟一个或者多个可迭代对象
功能:这个函数可以实现把可迭代对象中的每个数据依次带入功能函数(function)中
返回值:注意map() 函数并不会改变原来的数据,而是生成一个新的map对象(本质是一个迭代器),map对象第一个参数是作用功能,第二个是被功能函数作用可迭代对象,当我们去通过列表(list)进行强制转换会触发函数的作用。
其他信息:这个函数在Python2的返回值是直接返回list类型,而在Python3是返回一个map类型,但是map类型要去通过list() 转换才可以输出结果
map() 函数是Python中的内置函数,这个函数又叫做映射函数,其实里面具有一个迭代器的功能,会依次遍历可迭代对象进行相关的操作。
help(map) 查看这个函数的相关信息
示例:
示例(1):输出map()函数返回值(迭代器)结果
def fun(n):
return n**2
if __name__=='__main__': #判断是不是执行文件
li=[x for x in range(1,12)]
re=map(fun,li)
print(type(re))
print(list(re))
print(tuple(re))
#输出结果:<class 'map'>
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
# ()
这里可以看出,re是一个map类型,当我们用list去转换re的类型,可以看到输出结果,但是如果我们用tuple去转换类型却输出不了结果,所以map类型只能通过列表类型去转换输出结果。
def fun(n):
return n**2
if __name__=='__main__':
li=[x for x in range(1,12)]
re=map(fun,li)
for i in re:
print(i,end=' ')
#输出结果:1 4 9 16 25 36 49 64 81 100 121
这里可以看出,map的返回值是一个迭代器,我们可以去通过循环依次输出结果,在输出的时候会触发fun() 函数的作用,fun() 函数会依次作用给每一个迭代对象,然后输出
示例(2):与循环对比
那这里就有人会问了,为什么不用循环去实现这种功能呢?循环不也可以吗?当然可以,只是效率没有map() 函数高,而且没有用map() 这么秀~
def fun(n):
return n**2
if __name__=='__main__':
li=[x for x in range(1,12)]
re=[]
for i in li:
num=fun(i)
re.append(num)
print(re)
#输出结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
示例(3):字符串转列表
if __name__=='__main__':
str1='123456'
result=map(int,str1)
print(list(result))
#输出结果:[1, 2, 3, 4, 5, 6]
示例(4):元组转列表
if __name__=='__main__':
tu=(x for x in range(1,11))
result=map(str,tu)
print(list(result))
#输出结果:['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
示例(5):提取字典的键key,通过函数作用放入到列表当中
def fun(n):
return n*2
if __name__=='__main__':
d={1:'good',2:'nice',3:'wao',4:'bless'}
result=map(fun,d)
print(list(result))
#输出结果:[2, 4, 6, 8]
示例(6):与lambda函数结合
1.
if __name__=='__main__':
li=[x for x in range(-7,8) if x%2==0]
result=map(lambda y:y**2+y,li)
print(list(result))
#输出结果:[30, 12, 2, 0, 6, 20, 42]
2.多个可迭代对象
if __name__=='__main__':
li=[1,3,5,7]
lil=[2,4,6,8]
result=map(lambda x,y:x+y,li,lil)
print(list(result))
#输出结果:[3, 7, 11, 15]
if __name__=='__main__':
li=[1,3,5,7]
lil=[2,4,6]
result=map(lambda x,y:x+y,li,lil)
print(list(result))
#输出结果:[3, 7, 11]
这里说明一下:如果是对两个或者两个以上可迭代对象进行处理的话,是根据序列的下标一一对应处理,比如上面的例子,是按照1+2,3+4,5+6,7+8依次输出结果,但是第二个例子没有8,故无法对下标为 3 的位置进行处理,所以输出结果只有三个。
3.多个可迭代对象返回元组形式
if __name__=='__main__':
li=[1,2,3,4]
lil=[5,6,7,8]
result=map(lambda x,y:(y,x),li,lil)
print(list(result))
#输出结果:[(5, 1), (6, 2), (7, 3), (8, 4)]
4.元组与列表共同作用
if __name__=='__main__':
li=[a for a in range(0,4)]
tu=(b for b in range(4,8))
result=map(lambda x,y:(x**2,y-5),li,tu)
print(list(result))
#输出结果:[(0, -1), (1, 0), (4, 1), (9, 2)]
这里可以看出,iterable……可以是列表或者元组,只要有下标且对应的都可以进行参与运算
示例(7):math函数作为function
import math
if __name__=='__main__':
li=[a for a in range(-5,4)]
result=map(lambda x:round(math.sin(x),2),li) #保留两位小数
print(list(result))
#输出结果:[0.96, 0.76, -0.14, -0.91, -0.84, 0.0, 0.84, 0.91, 0.14]
来源:https://blog.csdn.net/m0_73633088/article/details/129283696


猜你喜欢
- 简单介绍:Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 在讲这个问题之前让我们来先看一段代码: dim sql_injdata,SQL_inj,SQL_Get,SQL_Data,Sql_
- 官网上关于组件继承分为两大类,全局组件和局部组件。无论哪种方式,最核心的是创建组件,然后根据场景不同注册组件。有一点要牢记,“Vue.js
- 以下是menu.asp代码 程序代码 <% '-----------------------------------
- 在Python中,数据存储方式分为同步存储和异步存储。同步写入速度比较慢,而爬虫速度比较快,有可能导致数据保存不完整,一部分数据没有入库。而
- 本文实例讲述了JavaScript实现控制打开文件另存为对话框的方法。分享给大家供大家参考。具体如下:这里通过JS打开图片另存为对话框,提示
- 本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下:官方文档 – https://docs.opencv
- MySQL表中的约束(constraint)为了保证数据的完整性,(数据的精确性和可靠性)SQL规范以约束的方式对表数据进行额外的条件限制,
- 1 任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个
- 前言 其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有很多这种解释了,但是要么就
- 背景:我们有一个用go做的项目,其中用到了zmq4进行通信,一个简单的rpc过程,早期远端是使用一个map去做ip和具体socket的映射。
- 1、捕获摄像头和实时显示import cv2import numpy as npimport pickleimport matplotlib
- 一、mongodb安装在官网下载适应于自己平台的mongodb,在此安装环境为Windows7-64bit下载完成后直接安装,连续点击nex
- 使用Python3和Opencv识别一张标准的答题卡。大致的过程如下:1.读取图片2.利用霍夫圆检测,检测出四个角的黑圆位置,从确定四个角的
- Python3 线程中常用的两个模块为:_threadthreading(推荐使用)使用Thread类创建import threadingf
- 什么是双端队列双端队列是与队列类似的有序集合。它有一前、一后两端,元素在其中保持自己的位置。与队列不同的是,双端队列对在哪一端添加和移除元素
- 前言开发中我们或多或少会涉及到一些场景需要使用延时操作,而延时操作其实并不是一个很好的选择,并不是一个很好的方案,因为它不可控,也可能产生时
- Python常见的异常提示及含义对照表如下:异常名称描述BaseException所有异常的基类SystemExit解释器请求退出Keybo
- 1 序言相信大家都还记得这则新闻吧,欧洲云计算巨头 OVH 位于法国斯特拉斯堡的机房发生严重火灾,大火彻底摧毁了五层高、占地 500 平方米