版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/deng1456694385/article/details/87299145
python-高阶函数map/reduce/filter/sorted/sort详解用法
高阶函数
高阶函数就是可接受另一个函数作为参数传入的运行的函数,下面是四个常用的python内置处理List的函数都为高阶函数
map(每项单独处理最后返回一个Iterator)
基本用法与js的map
相同,就是参数方法写在第一项
>>> def f(x):
... return x +1
...
>>> r = map(f, [1,2,3,4,5]) //返回出来是一个迭代器
>>> list(r)
[2,3,4,5,6]
reduce(每项处理得到最后返回单个值,其实就是累计)
基本用法与js的map
相同,就是参数方法写在第一项,
>>> from functools import reduce
>>> def add(sum, item): #sum是累计,item新接收的一项
... return sum + item #返回值就是下一次的累计
...
>>> reduce(add, [1,2,3,4])
25
filter(判断每项是否符合要求,返回一个保留部分元素的Iterator)
def is_odd(n):
return n % 2 == 1 #通过返回值判断是否保留,true保留
#返回的是迭代器,需要先转成list
list(filter(is_odd, [1, 2, 3, 4,5, 6]))
# 结果: [1, 3, 5]
sorted(返回一个经过排序后的List)
这个不太一样返回直接返回的是List,而且方法是放在第二个参数上的
只传入list就是默认排序,默认按数字大小排序,字符串按照首字母大小排序
>>> list(sorted(['c','a','b']))
['a', 'b', 'c']
>>> list(sorted([3,2,1]))
[1, 2, 3]
自定义排序,需要用一个key的命名函数来排序,后面处理函数不影响元素的值
>>> sorted([-3, 2, -1], key=abs)
[-1, 2, -3]
第三个参数reserse
用来改变升序降序
>>> sorted([-3, 2, -1], key=abs,reserve=True)
[-3, 2, -1]
来个复杂点的
def f1(i):
return i[1]
def f2(i):
return i[2]
//
L = [('b', 10), ('a', 6), ('c', 5)]
>>> sorted(L,key=f1)
[('a', 6), ('b', 10), ('c', 5)]
>>> sorted(L,key=f2)
[('c', 5) , ('a', 6), ('b', 10), ]
对比一下sort
sort
函数和sorted
函数的区别在于,sort
会直接改变原对象,sorted
会返回一个新的对象,不改变原对象,用法上是L.sort
,参数方面是完全一样的
>>> L = [3,2,1]
>>> L.sort()
>>> L
[1,2,3]