map reduce filter sorted (高阶函数)

来源:互联网 发布:易企秀编辑器 js 编辑:程序博客网 时间:2024/06/05 10:03

map()函数

        map函数接收两个参数,一个是函数,一个是Iterable(可迭代对象 (集合数据类型如listdictstr))。

map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回,由于结果是一个IteratorIterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

eg: list(map(函数,Iterable))


reduce()函数

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
配合map()函数:
def str2int(s): #自己写一个把字符串转化为整数的函数
...     def f(x,y):
...             return x*10+y
...     def char2num(s):
...             return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5}[s]
...     return reduce(f,map(char2num,s))
...
>>> print(str2int('2324'))
2324

还可以用lambda函数进一步简化成:

>>> def char2num(s):
...     return{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5}[s]
...
>>> def str2int(s):
...     return reduce(lambda x,y:x*10+y,map(char2num,s))   #lambda函数代替上面的f()函数
...
>>> print(str2int('342422'))
342422

filter()函数

用于过滤序列。

接收一个函数和一个序列。(类似map()函数,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。)

可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数

用filter求素数:


def _odd_iter():               #先构造一个从3开始的奇数序列
n=1                          #注意这是一个生成器,并且是一个无限序列。
while True:
n+=2
yield n


def _not_divisible(n):         #定义一个筛选函数
return lambda x:x%n>0

def primes():                  #定义一个生成器,不断返回下一个素数
yield 2
it = _odd_iter()
while True:
n=next(it)
yield n
it = filter(_not_divisible(n),it)    #筛选

for n in primes():                  #设置一个退出循环的条件:
if n < 1000:
print(n)
else:
break

sorted函数

可以对list进行排序

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)[5, 9, -12, -21, 36]
key指定获得函数作用到序列的每一个元素上,然后根据key函数返回的结果来排序。


对字符串排序:默认上,大写字母Z会排在小写字母a的前面。

我们给sorted传入key函数,即可实现忽略大小写的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)['about', 'bob', 'Credit', 'Zoo']

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)['Zoo', 'Credit', 'bob', 'about']
形式:sorted(L, key=str.lower, reverse=True)
解释:key为排序所依据的规则,reverse表示反序
阅读全文
0 0
原创粉丝点击