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) 查看这个函数的相关信息 

Python高阶函数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&hellip;&hellip;可以是列表或者元组,只要有下标且对应的都可以进行参与运算

示例(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

标签:Python,函数,map
0
投稿

猜你喜欢

  • MySQL与PHP的基础与应用专题之创建数据库表

    2023-11-21 04:12:28
  • Python实现向QQ群成员自动发邮件的方法

    2021-08-16 13:41:33
  • python导入坐标点的具体操作

    2023-02-24 19:59:46
  • 讲解Python3中NumPy数组寻找特定元素下标的两种方法

    2023-07-17 09:58:42
  • 关于pyqt5控件自适应窗口超详细知识点汇总

    2021-03-26 14:37:57
  • Python Log文件大小设置及备份的方法

    2022-08-02 13:46:14
  • python实现WebSocket服务端过程解析

    2022-09-14 10:45:19
  • 用 SQL 脚本将 Access 导入 MSSQL 2000/2005 方法

    2008-10-22 13:51:00
  • PHP如何利用P3P实现跨域

    2023-11-23 20:16:58
  • 关于php unset对json_encode的影响详解

    2023-07-06 08:33:52
  • 改善登陆界面的用户体验: 自动聚焦表单

    2009-12-09 16:13:00
  • ASP中使用FileSystemObject时提高性能的一个小技巧

    2008-06-08 13:09:00
  • 使用pycharm运行flask应用程序的详细教程

    2022-12-15 05:15:55
  • python判断完全平方数的方法

    2023-07-12 06:43:13
  • matplotlib教程——强大的python作图工具库

    2021-05-18 23:42:55
  • 网页设计进阶之一 (步骤和大局观)

    2008-08-23 10:39:00
  • python Timer 类使用介绍

    2022-09-02 18:36:37
  • Python测试线程应用程序过程解析

    2023-09-11 03:04:25
  • 如何设计具可用性的网页表单?

    2010-03-20 21:57:00
  • Python如何实现自动发送邮件

    2022-05-09 04:22:55
  • asp之家 网络编程 m.aspxhome.com