python 匿名函数lambda 内置高阶函数map、reduce、filter、sorted
lambda函数:
Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,
Python的Lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。
简单例子:
a = lambda x,y:x+y print a(1,2) 输出结果为 3
lambda函数接收参数(最少为一个),参数之后接 : ,然后是表达式,执行lambda函数最终lambda返回的是函数的执行结果。
map函数:
map函数是python内置的一个高阶函数,接收一个函数 f 和一个 list 两个参数,然后将函数 f 作用到list中的每个元素,最终返回一个新的list。
例子:
def f(x):
return x**2
print map(f,[1,2,3,4,5,6,7,8,9,10])
输出结果为:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
reduce函数:
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,
reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例子:
##求n的阶乘 n = 5 print reduce(lambda x,y:x*y,range(1,n+1))
输出结果为:120
filter函数:
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,
返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例子:(求1到100中能被开方的数字)
import math def func(x): return math.sqrt(x) % 1 == 0 print filter(func,range(1,101))
sorted函数:
sorted(iterable, cmp=None, key=None, reverse=False),把iterable中的items进行排序之后,
返回一个新的列表,原来的iterable没有任何改变
1) iterable:iteralbe指的是能够一次返回它的一个成员的对象。iterable主要包括3类:
第一类是所有的序列类型,比如list(列表)、str(字符串)、tuple(元组)。
第二类是一些非序列类型,比如dict(字典)、file(文件)。
第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象。
2) cmp: 指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;
如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
3)key:指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
4)reverse:是一个布尔值。如果设置为True,列表元素将被降序排列,默认为升序排列。
通常来说,key和reverse比一个等价的cmp函数处理速度要快。这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。
li=[{"age":20,"name":"def"},{"age":25,"name":"abc"},{"age":10,"name":"ghi"}] #li=sorted(li,key=lambda x:x["age"]) #print(li) li = sorted(li,key=lambda x:x['age']) print li
###降序排列
l1 = [('a',4),('b',8),('c',1),('d',3)]
sorted_l1 = sorted(l1,key=lambda x:x[1],reverse=True)
print sorted_l1