python 的一个特点就是 代码简洁, 很大一部分的功劳就是其提供了很常用的built_in 函数;
最近系统的学习了一下,python的几个很常用的 函数 map,reduce,filter,sorted, 做一下总结。
其实这几个都是高阶函数(把函数作为参数传入的函数称为高阶函数)
map
首先map()
函数接收两个参数,一个是函数,一个是列表,map
将传入的函数依次作用到列表的每个元素,并把结果作为新的list返回。
形式: map(function,list)
比如说 要将一个 列表的数字 转换为字符型:可以通过遍历整个列表来解决:
L=[]但是如果使用 map()的话 可以很简洁的完成:
for i in range(1,10):
L.append(str(i))
print L
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()这个内置函数供使用, 排序实质就是比较两个元素的大小
一般默认的是 :
对于两个元素x
和y
,如果认为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代码变得很简洁无比~