Python map、reduce、filter函数用法
map():
第一个参数接受一个函数,
第二个参数接受一个或多个可迭代的类型,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。
del square(x): return x ** 2 map(square,[1,2,3,4,5]) # 结果如下: [1,4,9,16,25] 通过使用lambda匿名函数的方法使用map()函数: map(lambda x, y: x+y,[1,3,5,7,9],[2,4,6,8,10]) # 结果如下: [3,7,11,15,19] 通过lambda函数使返回值是一个元组: map(lambdax, y : (x**y,x+y),[2,4,6],[3,2,1]) # 结果如下 [(8,5),(16,6),(6,7)] 当不传入function时,map()就等同于zip(),将多个列表相同位置的元素归并到一个元组: map(None,[2,4,6],[3,2,1]) # 结果如下 [(2,3),(4,2),(6,1)] 通过map还可以实现类型转换 将元组转换为list: map(int,(1,2,3)) # 结果如下: [1,2,3] 将字符串转换为list: map(int,'1234') # 结果如下: [1,2,3,4] 提取字典中的key,并将结果放在一个list中: map(int,{1:2,2:3,3:4}) # 结果如下
reduce():
第一个参数是一个函数,第二个参数是一个可以迭代的类型(Iterable)
第一个参数的函数也必须接受两个参数,reduce
会把函数的返回值与序列的下一个元素继续传入函数做计算。
示例:求从1累乘到100的值
#reduce 将函数的到的结果继续当做参数传入到函数中去 from functools import reduce def add(x,y): return x*y print(reduce(add,range(100)))
那么我们可以形象的把这个方法做一个等价描述:
reduce(fn, [x1, x2, x3, x4,......]) = f(f(f(f(x1, x2), x3), x4) ......)
filter():
第一个参数是一个函数,第二个参数是一个可以迭代的类型(Iterable)
第一个参数的函数接受一个参数,reduce
会把函数的返回值与序列的下一个元素继续传入函数做计算。
示例:
people = [ {"name":"Alex","age":20}, {"name":"Hana","age":19}, {"name":"Anny","age":16}, {"name":"Sunny","age":18}, ] f = filter(lambda p:p["age"]>18, people) print(list(f))
结果为:
[{'name': 'Alex', 'age': 20}, {'name': 'Hana', 'age': 19}]