首页 > 代码库 > python基础之map/reduce/filter/sorted
python基础之map/reduce/filter/sorted
---map(fun,iterable)
首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象。即map(fun,iterable)
map函数就是将具体数值根据算法进行计算,并将结果保存为一个迭代器。我们知道,迭代器很‘懒‘,通过调用next函数一次只输出一个值。
来看一个最简单的map()例子。
#给定一组数1,2,3要求求出每个数加一后的值 >>> def add(x):
... x+=1
... return x
...
>>> l=[1,2,3]
>>> r=map(add,l)
>>> print(r)
<map object at 0x03E4F510>
>>> for i in r:
... print(i)
...
2
3
4
使用map对一行进行多个赋值
x,y,z=map(int,input(‘please input your number:‘).split()) print(x,y,z)
如何利用map()将名字首字母大写?
def daxie(name): return name[0].upper+name[1:] def daxie2(name): return ‘%s%s‘%(name[0].upper(),name[1:]) a=[‘linghuchong‘,‘dongfangbubai‘] r=map(daxie2,a) for i in r: print(i)
--reduce
reduce同map函数一样,也是接受两个参数,但不同的是,reduce函数将当前数值的计算结果与下一个数值的计算结果进行累积计算。
reduce()函数第一次运行时会将可迭代对象的第一项作为第一个参数,第二项作为第二个参数传入函数。
第二次运行则会将函数第一次运行所返回的结果作为第一个参数,可迭代对象的第三项作为第二个参数传入函数……
即:reduce(f,[1,2,3,4])=f(f(f(1,2),3),4)
来看一个简单的reduce函数的例子
# from functools import reduce def leijia(x,y): #注意,我们所定义的函数必须要接受两个参数,否则会报错 return x+y print(reduce(leijia,[1,2,3,4,5])) #结果 15 #当然也可多加默认参数 from functools import reduce def leijia(x,y,z=2): return x+y+z print(reduce(leijia,[1,2,3,4,5])) #结果: 23
--filter
同上两个函数一样,接受两个参数,第一个参数为函数名,第二个参数为序列。但filter根据序列中各个元素作用与函数时,函数返回结果(True/False)来决定该元素是否保留。
来看一个筛选偶数的简单例子:
def select(num): if num%2==0: return True else: return False r=filter(select,[1,2,3,4,5,6]) for i in r: print(i)
--sorted(list,key=None,reverse=False)
sorted顾名思义,就是排序的意思。
>>> sorted([22,33,55,11,44]) [11, 22, 33, 44, 55]
sorted还可以接受一个key函数,实现自定义排序。
1 key指定的函数将作用于list的 每一个元素 上。也就是list的 每个元素 作为参数传入key函数
2 sorted()函数按照keys函数返回的结果进行排序,并 按照对应关系 返回list相应的元素
>>> sorted([22,33,-11,44,-55],key=abs) [-11, 22, 33, 44, -55]
来一个复杂一点的实例:
# 根据名称排序 >>> d=[(‘linghuchong‘,‘xixingdafa‘),(‘dongfangbubai‘,‘kuihuabaodian‘),(‘zhangwuji‘,‘qiankundanuoyi‘)] >>> def by_name(a): ... return a[0] ... >>> r=sorted(d,key=by_name) >>> print(r) [(‘dongfangbubai‘, ‘kuihuabaodian‘), (‘linghuchong‘, ‘xixingdafa‘), (‘zhangwuji‘, ‘qiankundanuoyi‘)] # 根据功法排序 >>> def by_gongfa(a): ... return a[1] ... >>> r2=sorted(d,key=by_gongfa) >>> print(r2) [(‘dongfangbubai‘, ‘kuihuabaodian‘), (‘zhangwuji‘, ‘qiankundanuoyi‘), (‘linghuchong‘, ‘xixingdafa‘)]
python基础之map/reduce/filter/sorted