map()接收一个函数f和一个序列list作为参数,并通过f依次作用在list的每一个元素上并返回一个新的list2{注意:是不改变原来的序列,而生成新的序列},即将序列list的每一个元素作为函数f的传参,list2=map(f,list)由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

举例1:

list1=[1,2,3,4,5,6]需要将list的每个元素乘方返回新的序列

def f(x):
    return x*x
list2=map(f,list1)
print(list2)
结果:
<map object at 0x000002A4F1DB66D8>
因为在python3中,map()返回的是一个iterator迭代器,不是序列

print(list(list2))
结果:
[1, 4, 9, 16, 25, 36]

所以如果要在python3中实现返回序列的效果,可以加list(map(f,list))强转成序列

举例2:

按照首字母大写,后续字母小写的规则,规范英文名字的list
names1=['adam', 'LISA', 'barT']

def format_name(s):
    s2=s[0:1].upper()+s[1:].lower()
    return s2

names2=map(format_name,names1)
print(list(names2))
结果:
['Adam', 'Lisa', 'Bart']

举例3:

当seq序列多于一个时,map可以并行(注意是并行)

l2=map(lambda x,y:x**y,[1,2,3],[1,2,3])
for i in l2:
    print(i)
结果:第一个序列的每个元素作为x的值,第二个序列的每个元素作为y的值,求幂
1
4
27


l3 = map(lambda x, y: (x ** y, x + y), [1, 2, 3], [1, 2, 3])
for i in l3:
    print(i)
    
结果:
(1, 2)
(4, 4)
(27, 6)

举例4:

类型转换
l=map(int,'1234')
for i in l:
    print(type(i))
    print(i)
结果:
<class 'int'>
1
<class 'int'>
2
<class 'int'>
3
<class 'int'>
4