Python之高阶函数[map、reduce、filter、sort及sorted]、匿名函数及练习:利用map和reduce编写函数, 把字符串'123.456'转换成浮点数123.456
一、高阶函数
- 高阶函数:把一个函数名以实参的形式,传给这个函数的形参,这个函数就称为高阶函数。
- 函数本身也可以赋值给变量,变量也可以指向函数。
1、 map
- map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
- map(): 接收两个参数:一个是函数 ,一个是序列。map(函数,序列)
- Python3下的map()函数返回的是map对象,而map对象又是一个迭代器iterator,不再是list,故需要使用list()强制转换为列表。
- Python2下的map()函数直接返回的是列表。
1.1 对一个序列[-1,3,-4,-5]的每一个元素求绝对值
- abs : 求绝对值
输出:
1.2 对序列每个元素求阶乘
输出:
2、reduce
- reduce把一个函数作用在一个序列上,reduce把结果继续和序列的下一个元素做累积计算,其效果为:reduce(f,[x1,x2,x3,x4]) = f(f(x1,x2),x3),x4)
- reduce必须接受两个参数:第一个参数是一个函数,第二个参数是一个可迭代类型。而函数(第一个参数)也必须接受两个参数。
- Python3下的reduce移到了functools模块,使用之前需要 from functools import reduce
- Python2中的reduce是内置函数。
2.1 累乘:1到9
2.2 累加:1到100
3、filter过滤函数
- filter()函数接受一个函数和一个序列,函数作用于序列里的每个元素,对其进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件的元素组成的新列表。
- filter(): 接收两个参数:一个是函数 ,一个是序列。 函数必须返回True或False
- Python3下的filter()函数返回的是filter对象,不再是list,故需要使用list()强制转换为列表。
- Python2下的 filter函数直接返回的是列表。
3.1 输出1~100的偶数
输出:
4、sort及sorted
- sort函数:仅可作用于list列表,在原list上直接排序,不会创建新的list。 Python3中,sort函数有两个可选参数:key,reverse。 参数reverse指定排序:reverse=False正序,reverse=True倒序。 参数key指定了只含一个参数的方法,用来从列表的每个元素提取比较键。Python2中,sort函数有3个函数:key,reverse,cmp。
- sorted函数:所有可迭代对象都可以用sorted来排序,不会改变原来的对象,排序后的结果是新生成的。
4.1 通过元素长度排序
输出:
4.2 通过元素的字符排序
输出:
4.3 以绝对值倒序排列数组
4.4 按照关键字排序
输出:
二、匿名函数
- 匿名函数:在Python中,不通过def来声明函数名字,而是通过**lambda**关键字来定义的函数。
- lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。
- 语法:lambda 参数:表达式 先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。
- 符合lambda函数的情况:(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
1、求和
2、平方
3、偶数
三、练习
1、将一个字符串转换成整型(map和reduce)
‘12345’—12345
‘0’:0
‘1’:1
‘2’:2
…
‘9’:9
- 保留问题:将一个字符串转换成浮点型。
输出:
2、(2018-携程-春招题)一整形数组中,将数组中所有的0移动到末尾,非0项保持不变
输出:
3、奇数放在前面 偶数放在后面
4.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
输出:
5.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
输出:
6.利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456
输出: