Python培训
400-996-5531
欢迎大家来到自学Python教程教室,上一讲我们学习Python的另外一个知识点Python中变量的作用域的相关知识,这节课我们来了解Python中map 函数的相关内容,来看看吧:
来看两个问题:
1. 假设有一个数列,如何把其中每一个元素都翻倍?
2. 假设有两个数列,如何求和?
第一个问题,普通程序员大概会这么写:
lst_1 = [1,2,3,4,5,6] lst_2 = [] for item in lst_1: lst_2.append(item * 2) print lst_2
Python 程序员大概会这么写:
lst_1 = [1,2,3,4,5,6] lst_2 = [i * 2 for i in lst_1] print lst_2
这是我在《【Python 第64课】列表综合》里说到的方法。
今天来说另一种 Python 程序员常用的写法 -- map:
lst_1 = [1,2,3,4,5,6] def double_func(x): return x * 2 lst_2 = map(double_func, lst_1) print lst_2
map 是 Python 自带的内置函数,它的作用是把一个函数应用在一个(或多个)序列上,把列表中的每一项作为函数输入进行计算,再把计算的结果以列表的形式返回。
map 的第一个参数是一个函数,之后的参数是序列,可以是 list、tuple。
所以刚刚那个问题也可以写成:
lst_1 = (1,2,3,4,5,6) lst_2 = map(lambda x: x * 2, lst_1) print lst_2
这里原数据改为了元组,函数用 lambda 表达式替代。可参考《【Python 第70课】lambda 表达式》,微信中回复 70。
map 中的函数可以对多个序列进行操作。最开始提出的第二个问题,除了通常的 for 循环写法,如果用列表综合的方法比较难实现,但用 map 就比较方便:
lst_1 = [1,2,3,4,5,6] lst_2 = [1,3,5,7,9,11] lst_3 = map(lambda x, y: x + y, lst_1, lst_2) print lst_3
map 中的函数会从对应的列表中依次取出元素,作为参数使用,同样将结果以列表的形式返回。所以要注意的是,函数的参数个数要与 map 中提供的序列组数相同,即函数有几个参数,就得有几组数据。
对于每组数据中的元素个数,如果有某组数据少于其他组,map 会以 None 来补全这组参数。
此外,当 map 中的函数为 None 时,结果将会直接返回参数组成的列表。如果只有一组序列,会返回元素相同的列表,如果有多组数列,将会返回每组数列中,对应元素构成的元组所组成的列表。听上去很绕口是不是……代码试试看就明白了:
lst_1 = [1,2,3,4,5,6] lst_2 = [1,3,5,7,9,11] lst_3 = map(None, lst_1) print lst_3 lst_4 = map(None, lst_1, lst_2) print lst_4
恭喜您在Python自学的道路上又坚持了一天,今天我们学习了Python中map 函数的相关内容,下节课我们将分享更多Python中的相关内容,敬请关注 !
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved