1、map/reduce
Python内建了map()
和reduce()
函数。
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5]
上,就可以用map()
实现如下:
r=map(f,[1,2,3,4,5])
reduce
把一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
( ((1X10+2)X10+3)X10+4)+5
char2int:返回数字字符对应的值,map()得到字符串对应的所有数值
fn将两个数值变成一个十位数,reduce()得到一串数对应的数
def normalize(name): return name[0].upper()+name[1:].lower() list(map(normalize,['adam', 'LISA', 'barT'])) ['Adam', 'Lisa', 'Bart']
def prod(L): return reduce(lambda x, y: x * y,L) prod([9,7,3,5]) 945
def str2float(s): for i in range(len(s)): if s[i]=='.': break m=reduce(lambda x,y:x*10+y,map(int,s[0:i])) n=reduce(lambda x,y:x*0.1+y,map(int,s[:i:-1])) return m+n*0.1 str2float('123.45467')123.45467
2、filter
Python内建的filter()
函数用于过滤序列。
和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
过滤,生成一个新的序列
def zhishu(k): return lambda x:x%k>0 #过滤掉可以被k整除的数,k=2,3,5...不断调用下一个,可用next() def f(n): it=(x+1 for x in range(1,n)) #生成一个从2开始的generator while True: #循环 k=next(it) #从2开始调用,it的数减掉k yield k #返回k it=filter(zhishu(k),it) #过滤后只剩下不能被2整除的数,第一个数变3.... m=f(10) #输出由k组成的generator for i in m: print(i)
def huishu(a): for i in range(len(a)): return len(a)==1 or a[i]==a[-i-1] def ff(n): L=[str(i) for i in range(1,n+1)] m=filter(huishu,L) print(list(m))
3、sorted
sorted()
函数也是一个高阶函数,它还可以接收一个key
函数来实现自定义的排序
key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。