pythonDiary_01之map与reduce

前言

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
比如:list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
把这个list所有数字转为字符串

reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和

from functools import reduce
def add(x, y):
return x + y
reduce(add, [1, 3, 5, 7, 9])

例子

在一个有序集合,统计出现所有键的个数

from functools import reduce
def func(lst):
dic={}
for k in lst:
if not k in dic :
dic[k]=1
else :
dic[k]+=1;
return dic
lst=[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print(func(lst))
def func1(lst):
m=set(lst)
dic={}
for x in m:
dic[x]=lst.count(x)
return dic
ls=[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print(func1(ls))
def func2(dic,p):
if not p in dic :
dic[p]=1
else :
dic[p]+=1;
return dic
print(reduce(func2,ls,{}))

filter

filter()函数用于过滤序列。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

结果: [1, 5, 9, 15]

热评文章