---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')]