Python 几个内建函数: map, reduce,filter,sorted 整理

时间:2022-04-22 19:25:02

python 的一个特点就是 代码简洁, 很大一部分的功劳就是其提供了很常用的built_in 函数; 

最近系统的学习了一下,python的几个很常用的 函数 map,reduce,filter,sorted, 做一下总结。

其实这几个都是高阶函数(把函数作为参数传入的函数称为高阶函数


 map                                                                                                                        

          

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

形式: map(function,list)

   比如说 要将一个 列表的数字 转换为字符型:可以通过遍历整个列表来解决:

L=[]
for i in range(1,10):
L.append(str(i))
print L
    但是如果使用 map()的话 可以很简洁的完成:
print map(str,range(1,10))

当然自己可以定义function,然后在map里面直接调用,很方便


reduce                                                                                                                              

reduce 和map的形式完全一样,reduce(function,list)        

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

就相当于函数的迭代  

     reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

          比如举一个简单的例子,求一个列表的和:(当然可以直接sum()完成)


def SUM(x,y):
return x+y
print reduce(SUM,range(1,10))

      将相当于对[1,2,3,4.....]先执行1+2 然后将结果3作为x,列表的下一个元素3作为y再次执行SUM(x,y)函数



filter                                                                                                                                 

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

例如找出在一个str 找出 字母,筛选掉非字母:

def test(s):
return s.isalpha()
print filter(test,'abc134sfs')

      这样在 对list处理的时候,有时候会很方便, 自定义function



sorted                                                                                                                                

          排序算法,十分常用,在python中 有sorted()这个内置函数供使用, 排序实质就是比较两个元素的大小 

一般默认的是 : 

对于两个元素xy,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1 

这个在具体构造比较函数很有用。

继续说sorted()   首先sorted可以直接接受一个列表作为参数:  (前提是列表中元素可以比较)

>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

 接着,既然sorted()函数也是一个高阶函数,那么它就可以以一个函数作为参数,这个函数就可以是 比较大小的函数:

 形式 sorted(list,function)

 看例子:

def cmp(x,y):
if x<y:
return 1
elif x==y:
return 0
else:
return -1

print sorted([1,3,2,5,6,8],cmp)

这个就是逆序排序,就是从大到小排序,是因为改变了比较大小的标准。


这几个内建函数,或者配合上lambda匿名函数, 会让你的python代码变得很简洁无比~