python3高阶函数:map,reduce,filter,sorted
目录
一、map()
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的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
是一个Iterator
,Iterator
是惰性序列,因此通过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
- 下一篇:python3-生成器
- 上一篇:python处理yaml文件