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}]

 

posted @ 2020-10-15 21:36  -零  阅读(272)  评论(0编辑  收藏  举报