您的位置:首页 > 编程语言

函数式编程-高阶函数map()及reduce(),fillter(),sorted()

2018-02-22 14:59 337 查看
一、map(),函数f有一个参数

map()
函数接收两个参数,一个是函数,一个是序列,
map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。



>>> def f(x):
...     return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
二、reduce() 函数f必须有两个参数
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是
> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
str转为num
练习1、利用
map()
函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:
['adam', 'LISA', 'barT']
,输出:
['Adam', 'Lisa', 'Bart']
]def cg_str(lst):
return list(map(lambda x:x[0].upper()+x[1:].lower(),lst))
print(cg_str(['adam','LISA','barT']))
['Adam', 'Lisa', 'Bart']
练习2、Python提供的
sum()
函数可以接受一个list并求和,请编写一个
prod()
函数,可以接受一个list并利用
reduce()
求积。
def prod(lst):
return reduce(lambda x,y:x*y,lst)
print(prod([1,2,3,4,5]))
123
三、fillter()   函数f一个参数和
map()
类似,
filter()
也接收一个函数和一个序列。和
map()
不同的时,
filter()
把传入的函数依次作用于每个元素,然后根据返回值是
True
还是
False
决定保留还是丢弃该元素。
def not_empty(s):
return s and s.strip()

filter(not_empty, ['A', '', 'B', None, 'C', '  '])
# 结果: ['A', 'B', 'C']
四、sorted()  作为高阶函数时,f参数2个通常规定,对于两个元素
x
y
,如果认为
x < y
,则返回
-1
,如果认为
x == y
,则返回
0
,如果认为
x > y
,则返回
1
,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
Python内置的
sorted()
函数就可以对list进行排序:
>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
此外,
sorted()
函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个
reversed_cmp
函数:
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
传入自定义的比较函数
reversed_cmp
,就可以实现倒序排序:
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: