- Python爬虫、数据分析与可视化:工具详解与案例实战
- 成立明 胡书敏 黄勇
- 662字
- 2021-03-31 12:07:45
2.5.1 通过map方法实现序列的映射
如果我们要让某个函数作用到序列上,就可以用map方法来实现。Mapmap方法能起到映射的作用,语法如下:
map(function, iterable,…)
其中,function表示映射函数,iterable表示待映射的序列。序列的个数可以是一个,也可以是多个。在调用map方法时,会对iterable序列中的每个元素执行function方法,并返回结果。
Python 3的map用法和Python 2的不同,在如下的MapDemo.py代码里将演示基于Python 3的map用法。
01 # coding=utf-8 02 def increase(x): # 加1操作 03 return x+1 04 newList = map(increase, [1,3,5]) 05 print(newList) # 错误的用法 06 # 结果要做转换 07 print(list(newList)) # [2, 4, 6] 08 def tagStudent(score): 09 if score>90: 10 return "Good" 11 else: 12 return "Normal" 13 print(map(tagStudent,[100,80])) # 错误的用法 14 # ['Good', 'Normal'] 15 print(list(map(tagStudent,[100,80]))) 16 # 演示多个序列的lambda表达式 17 sum=map(lambda a,b: a+b, [1,2,3], [2,4,6]) 18 print(list(sum))# [3, 6, 9]
在第2行和第3行里,我们定义了实现加1操作的increase操作。在第4行的map方法里,第1个参数是increase方法,第2个参数是一个序列,该map方法会把针对序列加1操作的结果返回给newList变量。
在第5行里,我们给出了错误的用法,事实上我们需要把返回对象newList通过像第7行那样的方法转换成list对象后才能使用。这里转换成list是因为第4行里待map(映射)的序列是list类型的,如果是set等类型,那么在使用时也要像第7行那样先转换成对应的类型。
在第8行到第12行里,我们定义了一个根据分数分类学生的tagStudent方法。在第13行的map方法里,第1个参数是tagStudent方法,第2个是序列,同时演示了错误的用法。在第15行的用法中,我们同样能看到用list转换的动作。
在map方法里,第1个参数可以是方法名,也可以是lambda表达式。比如在第17行里,第1个参数是lambda表达式,作用是返回两个数的和。该map方法能处理2个序列,从第18行的输出结果中能看到映射结果。
总之,从上述代码里,我们能体会到map函数针对序列的“映射”作用。