filter(), map(), reduce()三个内置函数在我们数据过滤、清洗和映射中发挥着重要的作用
1.filter(function, iterable)
你可以把 filter 当成一个过滤器,用来选择原来 list 中满足特定条件的 value
def f(x):
return x % 3 == 0 or x % 5 == 0
#筛选出了 list(range(2,25))中能被 3 整除或者能被 5 整除的数
data=list(filter(f, range(2, 25))) #py3需要转成list,py2不需要洗
print(data)
## [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
print('--------------------------')
q = list(filter(lambda x:x%2 == 0, range(1,10))) #range(1,10)范围内的整数
print(q)
# [2, 4, 6, 8]
2.map(function, sequence)
map 函数可以把 list 中的每一个 value 传给函数,并且将每一次函数返回的结果合到一起生成一个新的 list;py3都需要转换成一个list
# 计算平方数
def square(x) :
return x ** 2
data1=list(map(square, [1,2,3,4,5])) # 计算列表各个元素的平方
print(data1)
#[1, 4, 9, 16, 25]
data2=list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 使用 lambda 匿名函数
#[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
#[3, 7, 11, 15, 19]
#备注:当两个list中的value个数不相等时, 程序会报一个TypeError错误。因为一个NoneType不能和任何类型的数据进行运算
3.reduce(function, sequence)
reduce() 函数返回一个值而不是一个 list
#reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里
from functools import reduce
def add(x,y):
return x + y
print (reduce(add, range(1, 101)))
# 5050
#reduce() 可以添加第三个参数
print(reduce(lambda x,y : x+y , range(11) , 11))
#66