1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
map ()函数
例如,对于 list [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
如果希望把 list 的每个元素都作平方,就可以用 map ()函数:
因此,我们只需要传入函数f(x) = x * x,就可以利用 map ()函数完成这个计算:
def f(x):
return x * x
print map (f, [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ])
输出结果:
[ 1 , 4 , 9 , 10 , 25 , 36 , 49 , 64 , 81 ]
注意: map ()函数不改变原有的 list ,而是返回一个新的 list 。
利用 map ()函数,可以把一个 list 转换为另一个 list ,只需要传入转换函数。
由于 list 包含的元素可以是任何类型,因此, map () 不仅仅可以处理只包含数值的 list ,事实上它可以处理包含任意类型的 list ,只要传入的函数f可以处理这种数据类型。
任务
假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用 map ()函数,把一个 list (包含若干不规范的英文名字)变成一个包含规范英文名字的 list :
输入:[ 'adam' , 'LISA' , 'barT' ]
输出:[ 'Adam' , 'Lisa' , 'Bart' ]
def format_name(s):
s1 = s[ 0 : 1 ].upper() + s[ 1 :].lower();
return s1;
print map (format_name, [ 'adam' , 'LISA' , 'barT' ])
|
map()函数是python内置的高阶函数,对传入的list的每一个元素进行映射,返回一个新的映射之后的list
Python map()函数的用法
Python函数式编程之map()
Python中map()、filter()、reduce()这三个都是应用于序列的内置函数。
格式:
1
|
map (func, seq1[, seq2,…])
|
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回。如果func为None,作用同zip()。
1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。
让我们来看一下只有一个seq的时候,map()函数是如何工作的。
从上图可以看出,函数func函数会作用于seq中的每个元素,得到func(seq[n])组成的列表。下面举得例子来帮助我们更好的理解这个工作过程。
1
2
3
|
#使用lambda
>>> print map ( lambda x: x % 2 , range ( 7 ))
[ 0 , 1 , 0 , 1 , 0 , 1 , 0 ]
|
1
2
3
|
#使用列表解析
>>> print [x % 2 for x in range ( 7 )]
[ 0 , 1 , 0 , 1 , 0 , 1 , 0 ]
|
一个seq时,可以使用filter()函数代替,那什么情况不能代替呢?
2、当seq多于一个时,map可以并行(注意是并行)地对每个seq执行如下图所示的过程:
从图可以看出,每个seq的同一位置的元素同时传入一个多元的func函数之后,得到一个返回值,并将这个返回值存放在一个列表中。下面我们看一个有多个seq的例子:
1
2
|
>>> print map ( lambda x , y : x * * y, [ 2 , 4 , 6 ],[ 3 , 2 , 1 ])
[ 8 , 16 , 6 ]
|
如果上面我们不使用map函数,就只能使用for循环,依次对每个位置的元素调用该函数去执行。还可以使返回值是一个元组。如:
1
2
|
>>> print map ( lambda x , y : (x * * y, x + y), [ 2 , 4 , 6 ],[ 3 , 2 , 1 ])
[( 8 , 5 ), ( 16 , 6 ), ( 6 , 7 )]
|
当func函数时None时,这就同zip()函数了,并且zip()开始取代这个了,目的是将多个列表相同位置的元素归并到一个元组。如:
1
2
|
>>> print map ( None , [ 2 , 4 , 6 ],[ 3 , 2 , 1 ])
[( 2 , 3 ), ( 4 , 2 ), ( 6 , 1 )]
|
需要注意的是:
map无法处理seq长度不一致、对应位置操作数类型不一致的情况,这两种情况都会报类型错误。如下图:
3、使用map()函数可以实现将其他类型的数转换成list,但是这种转换也是有类型限制的,具体什么类型限制,在以后的学习中慢慢摸索吧。这里给出几个能转换的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
* * * 将元组转换成 list * * *
>>> map ( int , ( 1 , 2 , 3 ))
[ 1 , 2 , 3 ]
* * * 将字符串转换成 list * * *
>>> map ( int , '1234' )
[ 1 , 2 , 3 , 4 ]
* * * 提取字典的key,并将结果存放在一个 list 中 * * *
>>> map ( int , { 1 : 2 , 2 : 3 , 3 : 4 })
[ 1 , 2 , 3 ]
* * * 字符串转换成元组,并将结果以列表的形式返回 * * *
>>> map ( tuple , 'agdf' )
[( 'a' ,), ( 'g' ,), ( 'd' ,), ( 'f' ,)]
#将小写转成大写
def u_to_l (s):
return s.upper()
print map (u_to_l, 'asdfd' )
|
总结
以上所述是小编给大家介绍的详解Python map函数及Python map()函数的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!