一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情。
filter()函数用于过来序列,过滤掉不符合条件的元素,返回有符合条件的元素组成的新列表。
map()函数是根据提供的函数对指定序列做映射。
reduce() 函数会对参数序列中元素进行累积。
1、filter()
filter(func,iter)这个函数接受两个参数,参数func是一个函数,参数iter是一个序列,序列的每个元素作为参数传递给函数进行判,然后返回。返回Ture和False,最后将返回 True 的元素放到一个迭代器里。
获取0-9之间的偶数
def func(a):
if a % 2 ==0:
return a
list1 = filter(func,[0,1,2,3,4,5,6,7,8,9])
print(list1)
for i in list1:
print(i)
此时运行结果为<filter object at 0x7f928ed01250> <class 'filter'> 2 4 6 8,返回一个可迭代的迭代器.通过循环可以取出来这些数据。
2、map()
map(func,iter)这个函数接受两个参数,参数func是一个函数,参数iter可以是一个或者多个可迭代的序列,返回一个集合,把函数依次作用在序列中的每一个元素上,得到一个新的序列并返回,注意:map不会更改原来的序列,而是返回一个新的序列。、
将列表list1和list2中的元素相加
list1=[1,2,3,4,5,6]
list2=[1,2,3,4,5,6]
result = map(lambda x,y :x+y,list1,list2)
print(result)
for i in result:
print(i)
此时运行结果为为<map object at 0x7ff04753cee0>2 4 6 8 10 12,返回个可迭代的序列,可以通过循环获取序列中的元素。可以通过list()方法转化成一个列表。
3、reduce()
reduce(func,iter,init)这个函数也接受两个参数,参数func是一个函数,参数iter是一个可迭代的序列,参数init是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取iter中的第一个元素。
没有指定init值的
from functools import reduce
def he(x,y):
return x+y
result = reduce(he,range(0,20))
print(result)
此时运行结果为190,上面的例子中range(0,20)函数生成的是一个[1, 2, 3, 4, 5,6,。。。19]这样的列表,这里我们给它个名叫seq1吧,reduce()函数执行时,由于没有指定init参数,所以将取seq1中的第一个元素1,作为第一个元素,由于函数he()有2个变量,所以需要两个实参,于是就取seq1中的第2个元素2,与第一个元素1一起传入he函数中去执行,并将返回结果2,并同下一个元素3再一起传入he()函数中执行,再次返回的结果,作为下一次执行的第一个元素,依次类推,就得出结果20! = 120。
有指定init的值
from functools import reduce
def he(x,y):
return x+y
result = reduce(he,range(1,20),4)
print(result)
此时运行结果为194,就会将init作为第一个元素,和seq1中的第一个元素1一起传入he()函数中去执行,返回结果再作为下一次的第一个元素。