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(functioniterable...)                                                       
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)]