小门板儿

Menu

python3高阶函数:map,reduce,filter,sorted

一、map()

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

要讲函数f(x)=1/x,作用在一个列表[1,2,3,4,5]上,可用map()实现

>>> def f(x):
...     return 1/x
...     
>>> l=map(f,[1,2,3,4])
>>> list(l)
[1.0, 0.5, 0.3333333333333333, 0.25]

由于结果r是一个IteratorIterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个

二、reduce()

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

reduce(f,[a,b,c])=reduce(f(f(a),b),c),例如将序列[1,2,3,4]变为整数1234,使用reduce()方法

def  f1(a,b):
   return 10*a+b

print(reduce(f1,[1,2,3,4]))

三、filter()

filter()函数用于过滤序列,接收两个参数,一个函数,一个序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。返回值也是一个Iterator惰性序列

例如,去掉list中的奇数,保留偶数

>>> def f(x):
   if x%2==0:
       return True
print(list(filter(f,[1,2,3,4])))
[2, 4]

四、sorted()

Python内置的sorted()函数就可以对list进行排序,可接受一个key函数来实现自定义的排序

>>> sorted([1,-4,7,3],key=abs)
[1, 3, -4, 7]

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母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 = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
   return t[0]
L2 = sorted(L, key=by_name)
print(L2)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

参考文献:https://www.liaoxuefeng.com/wiki/1016959663602400/1017329367486080

https://www.liaoxuefeng.com/wiki/1016959663602400/1017404530360000

https://www.liaoxuefeng.com/wiki/1016959663602400/1017408670135712

— 于 共写了1496个字
— 标签:

评论已关闭。