2、Python中filter()、map()和reduce()的区别
2.1、概述:
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
2.1.1.语法:filter(function, iterable)
该方法接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回
True 或 False,最后将返回 True 的元素放到新列表中。
2.1.2 案例:判断列表中奇数
from functools import reduce def is_odd(i): return i%2==1 newlist=filter(is_odd,[1,3,89,34,4,6,7]) print(list(newlist))
map() 会根据提供的函数对指定序列做映射
2.2.1.语法:map(function, iterable, ...)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
2.2.2. 案例: 提供了两个列表,对相同位置的列表数据进行相加
result = map(lambda x,y:x+y,[1,2,43,4,5],[1,4,3,5]) print(list(result))
reduce() 函数会对参数序列中元素进行累积。
2.3.1.语法:reduce(function, iterable[, initializer])
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参
数)先对集合中的第 1、2 个元素 进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
python3中将 reduce 放在functools模块中了
2.3.2. 案例: 提供了两个列表,对相同位置的列表数据进行相加
result=reduce(lambda x,y:x+y,[1,2,4,5]) print(result)
2.4、应用场景:
面试题: 分别使用map,reduce,filter函数完成下面的任务
1)、计算1-100的和
result=reduce(lambda x,y:x+y,range(1,101)) print(result)
2)、1-10,求每个数字的平方
list1=map(lambda x:x*x,range(1,11)) print(list(list1))
3)、 {“a”,”ab”,”abc”,”bc”,”cd”}输出含有C字符的元素,返回值是list
list2=filter(lambda x: "c" in x,{"a","ab","abc","bc","cd"}) print(list(list2))