Python:map函数用法详解
一个简单的例子:将一个list中所有元素平方,常规的做法如下图所示,虽然实现了这个功能,但并没有给人一目了然的感觉。若换成map来实现,则会好很多。
1 2 3 4 5 6 7 8 9 10 | def f(x): return x*x def test(): l=[] for i in [1,2,3,4,5,6]: l.append(f(i)) return l if __name__ == "__main__": l=test() print(l) |
使用map函数
1 2 3 4 5 6 7 8 | def f(x): return x*x def maptest(): a=[1,2,3,4,5,6] r=map(f,a) print(list(r)) if __name__ == "__main__": maptest() |
1、map函数介绍及其简单使用¶
上述用一个简单的例子演示的map函数的用法及其优势,下面将详细介绍map函数的用法:
map()
函数接收两个参数,一个是函数,一个是Iterable
迭代器
map将传入的函数依次作用到序列的每一个元素,并把结果作为新的Iterable
返回。
其语法格式为:
1 2 3 | map(function,iterable...) function---函数名 iterable---一个或多个序列 |
map作为高阶函数,事实上它把运算规则抽象了,我们可以用这种方式计算任意复杂的函数.
再比如,把一个list的所有数据转为string类型:
1 2 3 4 5 6 | def maptest(): a=[1,2,3,4,5,6] r=map(str,a) print(list(r)) if __name__ == "__main__": maptest() |
执行结果
1 | ['1', '2', '3', '4', '5', '6'] |
再举一个小例子,对list中的各个元素开方,一步到位:
1 2 3 4 5 6 7 | import math def maptest(): a=[1,2,3,4,5,6] r=map(math.sqrt,a) print(list(r)) if __name__ == "__main__": maptest() |
!注意:在使用math自带函数时,只需要函数名即可
2、map函数与lambda函数结合使用,下面方法同样可以达到对list中的数二次方的目的
1 2 3 4 5 6 | def maptest(): a=[1,2,3,4,5,6] r=map(lambda x:x**2,a) print(list(r)) if __name__ == "__main__": maptest() |
map函数与lambda函数结合使用,可以传入两个参数相加:¶
1 2 3 4 5 6 7 | def maptest(): a=[1,2,3,4,5,6] b=[1,2,3,4,5,6] r=map(lambda x,y:x+y,a,b) print(list(r)) if __name__ == "__main__": maptest() |
还可以同时计算多个值:
1 2 3 4 5 6 7 8 | import math def maptest(): a=[1,2,3,4,5,6] b=[1,2,3,4,5,6] r=map(lambda x,y:(x+y,x*y),a,b) print(list(r)) if __name__ == "__main__": maptest() |
执行
1 | [(2, 1), (4, 4), (6, 9), (8, 16), (10, 25), (12, 36)] |