200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python学习之Part09.高阶函数filter() map() reduce() sorted()

Python学习之Part09.高阶函数filter() map() reduce() sorted()

时间:2019-12-24 11:40:50

相关推荐

Python学习之Part09.高阶函数filter() map() reduce() sorted()

1.高阶函数

一个函数作为参数传给另外一个函数;一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归)

# abs()用来求一个数的绝对值# 将abs函数赋值,则f==absf = absprint(f(-10))# 函数的返回值为另一个函数def my_abs(x,y):return f(x),f(y)print(my_abs(-10,20))

输出结果:

10(10, 20)

2.python中的内置高阶函数之map()

map()函数的特性:map(fun_name, seq) --> 将函数fun作用在seq中的每个每个值上 最后返回一个列表对象;且函数fun必须是接受一个参数,返回一个参数,而不是多个。

# 对一个序列[-1,3,-4,-5]的每一个元素求绝对值print(map(abs, [-1,-2,-3,7,8,-9]))print(list(map(abs, [-1,-2,-3,7,8,-9])))

输出结果:# map()返回一个对象<map object at 0x7efd2dd320f0># list(map())将此对象转换为一个列表[1, 2, 3, 7, 8, 9]

# 对序列的每个元素求阶乘import random# 用来求一个数阶乘的函数def fun_jiecheng(num):res = 1for i in range(1, num+1):res *= ireturn res# 随机生成5和1~10的数字li = [random.randint(1,10) for i in range(5)]# 使用map()函数将li中的每个元素求阶乘,并将结果作为列表输出print(list(map(fun_jiecheng, li)))

输出结果:[2, 120, 720, 720, 2]

3.python中的内置高阶函数之reduce()

reduce()函数特性:reduce(fun_name, seq) --> reduce返回一个值将函数fun作用在一个序列上,fun接受序列的2的元素作为参数,返回一个值将此值与序列的下一个元素继续作用例如: reduce(fun, [1,2,3,4]) --> fun(fun(fun(1,2),3),4)在python 2中,reduce是内置函数在python 3中,需要from functools import reduce

# 将一个字符串转换成整型('12345' --> 12345)from functools import reduces = input('Please input number:')lis = list(map(int, s))def cov_to_int(x, y):return x * 10 + yprint('int type is:', reduce(cov_to_int,lis),' ',type(reduce(cov_to_int,lis)))

输出结果:

Please input number:12345678int type is: 12345678 <class 'int'>

4.python中的内置高阶函数之filter()

filter()函数特性:和map()类似的,filter(fun_name, seq)也接收一个函数和一个列表对象;但是函数fun()返回值为True或False;filter()把传入的函数依次作用于序列的每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素。

# 过滤10以内的所有偶数def iseven(num):if num%2 == 0:return Trueelse:return Falseprint(filter(iseven,range(1,10)))print(list(filter(iseven,range(1,10))))

输出结果:

<filter object at 0x7fb72d451160>[2, 4, 6, 8]

5.python中的内置高阶函数之匿名函数lambda

lambda:

 冒号之前是传递的参数(可以有多个参数),冒号之后是表达式,返回表达式的值:

 0为假,非0为真

# 输出0~10的累加结果from functools import reducenums = [i for i in range(10)]print(reduce(lambda x,y:x+y, nums))

输出结果:45

# 输出10以内的所有偶数nums = [i for i in range(1, 10)]print(list(filter(lambda x:x%2==0, nums)))

输出结果:[2, 4, 6, 8]

# 将输入的英文变为首字母大写,其他小写的形式def my_cov(li):return list(map(lambda s:s.title(), li))li = ['redhat','PYTHON','hEllo']print(my_cov(li))

输出结果:['Redhat', 'Python', 'Hello']

# 字符串转换成float型('12345.123' --> 12345.123)from functools import reduces1 = input('Please input number:')s = s1.split('.')lis_1 = list(map(int, s[0]))lis_2 = list(map(int, s[1][::-1]))def cov_to_int_1(x, y):return x * 10 + ydef cov_to_int_2(x,y):if 0< x < 1:return x*0.1 + y*0.1else:return x * 0.01 + y * 0.1res = reduce(cov_to_int_1,lis_1)+reduce(cov_to_int_2,lis_2)print('float type is:',res,' ',type(res))

输出结果:

Please input number:123789.987321float type is: 123789.987321 <class 'float'>

6.python中的内置高阶函数之排序函数sorted()

sorted()函数特性:sorted()排序,将排序结果存储为一个新的列表来返回;默认按照ASC码值的大小进行排序;key参数为一个函数,会将需要排序的数据先传参进函数中执行完成后,再将返回值排序

# 将列表排序s=['bbc','aAc','Aasd','DUF']print(sorted(s, key=str.lower))

输出结果为:['aAc', 'Aasd', 'bbc', 'DUF']

# 有一个整数列表(10个元素),按照奇数在前偶数在后进行排序import randomdef fun_trans(num):if num%2 == 0:return 2else:return 1li = [random.randint(1,10) for i in range(10)]print(sorted(li, key=fun_trans))

输出结果:[7, 7, 1, 8, 8, 10, 2, 4, 4, 2]

# key的使用info = [# 商品名称 商品数量 商品价格('apple1', 200, 100),('apple2', 40, 32),('apple3', 20, 10),('apple4', 20, 15),]

# 按照商品价格进行排序print(sorted(info, key=lambda info:info[2]))

输出结果:[('apple3', 20, 10), ('apple4', 20, 15), ('apple2', 40, 32), ('apple1', 200, 100)]

# 按照商品的数量排序:print(sorted(info, key=lambda info:info[1]))

输出结果:[('apple3', 20, 10), ('apple4', 20, 15), ('apple2', 40, 32), ('apple1', 200, 100)]

# 先按照商品数量进行排序 如果商品数量一致,则按照商品价格进行排序def fun_num_count(d):return d[1],d[2]print(sorted(info, key=fun_num_count))

输出结果:[('apple3', 20, 10), ('apple4', 20, 15), ('apple2', 40, 32), ('apple1', 200, 100)]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。