Python函数之map( )

一 map()函数介绍

1 Python官网中关于map的介绍:Python官网中关于map的介绍

map ( functioniterable... )

Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted. For cases where the function inputs are already arranged into argument tuples, see itertools.starmap().

译:

map(functioniterable...)

返回一个迭代器,对iterable的每个项应用function,生成结果。如果传递多个可迭代对象参数,function必须接收这些参数,并应用到从iterables并行提取的项中(可能描述地不太恰当,后面有例子进行介绍)。如果有多个iterable,迭代器在最短的iterable遍历完成时,停止迭代。对于函数的输入已经排列成参数元组的情况,参见itertools.starmap()

2 Python核心编程中的定义:

map(func,seq[,seq2...]) :将函数func作用于序列(s)的每个元素,并用一个列表来提供返回值;如果func为None,func表现为一个身份函数,返回一个含有每个序列中元素集合的n个元组的列表。

程序举例:

>>> mapp = map(square,[1,2,3,4,5])
>>> list(mapp)
[1, 4, 9, 16, 25]
>>> mapp = map(lambda x : x ** 2 , [1,2,3,4,5])
>>> list(mapp)
[1, 4, 9, 16, 25]
含有多个iterable参数时进行并行遍历:

>>> mapp = map(lambda x,y,z:x+y+z,[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5])
>>> list(mapp)
[3, 6, 9, 12, 15]

二 map对象的访问方式

首先观察下面的例子,直接输出map()函数的返回值会出现什么情况。

>>> map(lambda x,y:x+y , [1,2,3],[4,5,6])
<map object at 0x00000241D42C2550>
    再看map()函数的英文介绍——"Return an iterator"。所以,map()函数返回的其实是一个迭代器。(关于迭代器的介绍请参考:Python迭代器小结——伯乐在线
所以,要想输出map对象的内容,我们需要借助这个迭代器。

可以使用for循环或list()构造函数,再借助map()函数返回的迭代器,来输出其内容。如下所示:

>>> mapp = map(lambda x,y:x+y , [1,2,3],[4,5,6])
>>> list(mapp)
[5, 7, 9]
>>> list(mapp)
[]
>>> mapp = map(lambda x,y:x+y , [1,2,3],[4,5,6])
>>> for item in mapp:
	print(item)

5
7
9
>>> for item in mapp:
	print(item)

>>> 

    这样是可以输出内容,但是只能输出一次。原因是:迭代器对象不支持重新迭代,即同一个迭代器对象不支持多次迭代。
  在迭代器对象的内部,其遍历机制实际是调用其内部函数__next__()来获取容器的下一个元素,当后面没有元素时,就抛出StopIteration异常。详细介绍请参考:Python迭代器小结——伯乐在线

上面的方法实际是每次输出时都要生成一个新的list。所以,为了能够实现多次迭代,需要保存生成的list对象。

>>> mapp = map(lambda x,y:x+y , [1,2,3],[4,5,6])
>>> listt = list(mapp)
>>> listt
[5, 7, 9]
>>> listt
[5, 7, 9]
>>> listt = [item for item in mapp]
>>> listt
[5, 7, 9]
>>> listt
[5, 7, 9]

这样,就可以实现多次访问map对象的数据了。

参考网址:
Python 3.x中map对象的访问方式——博客园

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张之海

若有帮助,客官打赏一分吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值