目录
一、Map 函数
1.调用def函数
2.调用lambda匿名函数
3.调用Python内置函数
4.多组可迭代对象
5.可迭代对象是字典
二、filter函数
1.基本用法
2.func为None
总结
map函数的作用是将给定可迭代对象的元素作为参数传入指定的函数,经过函数计算生成一组新的可迭代对象。其基本用法如下:
map(func,*iterables)
*func:指定的函数名
*iterables:可迭代对象,如列表或者字符串等,可以有多个对象
例如我们想将列表[1,2,3,4,5]转换成其元素平方的新列表,可以用map函数轻松实现。可以先定义一个square函数实现平方的功能,再用map函数来进行转换,代码如下:
>>> def square(x): #定义square的函数
... return x*x
>>> map(square,[1,2,3,4,5]) #Python3的map函数会返回一个map对象,并不是列表
需要注意的是在Python3中map函数返回的对象不再是列表,而是map object,需要用list函数将其转换成列表,如代码中所示。
上个例子需要先定义一个square函数,再去调用map函数,太繁琐了。我们可以利用匿名函数lambda来简化代码,如下所示:
>>> list(map(lambda x:x*x,[1,2,3,4,5])) #将lambda函数作为map的func
[1, 4, 9, 16, 25]
如果map引用的是相对简单的函数,lambda 函数是非常棒的一个选择。
Map也可以调用系统的内置函数,如我们想将字符串转换成数字列表,可以用如下方法:
>>> list(map(int,"12345")) #将字符串转换成int的列表
[1, 2, 3, 4, 5]
>>> list(map(float,"12345")) #将字符串转换成float的列表
[1.0, 2.0, 3.0, 4.0, 5.0]
Map函数的可迭代对象也可以是多组,例如实现两个元组相加,生产一个新的元组,举例如下:
>>> tuple(map(lambda x,y:x+y,(1,2,3),(4,5,6))) #注意这里用tuple来转换map对象
(5, 7, 9)
当输入的可迭代对象是字典时,map函数取的元素时字典的key,举例如下:
>>> list(map(str,{1:3,2:4,3:5})) #可迭代对象是字典
['1', '2', '3']
filter函数的作用是根据指定函数来过滤可迭代对象,如果可迭代对象的元素函数返回值为True,则返回该元素,否则过滤掉该元素。如果不指定函数,则过滤掉False的元素。语法如下
filter(func or None,*iterables)
*func:指定的函数名
*iterables:可迭代对象,如列表或者字符串等,可以有多个对象
例如想将列表[1,2,3,4,5,6]进行过滤,找出大于3的元素组成新列表。就可以用下面的方法:
>>> filter(lambda x:x>3,[1,2,3,4,5,6]) #返回filter object对象
>>> list(filter(lambda x:x>3,[1,2,3,4,5,6])) #用list函数可以转换
[4, 5, 6]
注意Python3的filter函数返回的是filter对象,需要用list函数转换成列表,和map函数类似。
当func为空的时候,filter函数返回的是True的元素组成的可迭代对象,例如:
>>> list(filter(None,[1,"",3,False,4]))
[1, 3, 4]
上面的这种用法可以用在字符串split方法生成的列表中,例如一个字符串有很多分隔符时,split方法就会生产一些空的元素,那我们就可以用filter函数来进行过滤,举例如下:
>>> str1="a,,c,d,,e,,f"
>>> str1.split(',') #用,来进行分割,会产生一些不想要的空的字符
['a', '', 'c', 'd', '', 'e', '', 'f']
>>> list(filter(None,str1.split(',')))#用filter方法过滤掉空字符
['a', 'c', 'd', 'e', 'f']
本文介绍了常见的map和filter函数,熟练掌握这2个函数可以帮助我们方便地进行列表或者其他可迭代对象的运算或者转换。如果本文对大家有所帮助,快快点赞收藏吧!