# map() 和 filter()
Python 内置有两个非常好用的高阶函数 map()
和 filter()
。
filter()
用于从可迭代对象中筛选元素。用法如下:
filter(筛选函数, 可迭代对象)
filter()
依次对 可迭代对象
中的每个元素调用 筛选函数
,如果返回值为 True
,则当前这个元素会被保留,否则被排除。最终返回一个包含所有被保留元素的迭代器。
显然这里的 筛选函数
可以用 lambda 表达式来创建。
例如,从 ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr']
筛选出长度为奇数的字符串。可以这样写:
filter(lambda x: len(x) % 2 == 1, ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])
>>> list(filter(lambda x: len(x) % 2 == 1, [‘a’, ‘b’, ‘cd’, ‘efg’, ‘hig’, ‘klmn’, ‘opqr’]))
[‘a’, ‘b’, ‘efg’, ‘hig’]
这里我们用 list()
将迭代器转换为列表。
map()
用于对可迭代对象中每一个元素逐一作处理。用法如下:
map(处理函数, 可迭代对象)
map()
依次对可迭代对象
中的每个元素调用处理函数
,最终返回一个包含所有被处理过后的元素的迭代器。
显然这里的处理函数
也可以用 lambda 表达式来创建。
例如,将['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr']
全部转换为大写。可以这样来写:
map(lambda x: x.upper(), ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])
>>> list(map(lambda x: x.upper(), [‘a’, ‘b’, ‘cd’, ‘efg’, ‘hig’, ‘klmn’, ‘opqr’]))
[‘A’, ‘B’, ‘CD’, ‘EFG’, ‘HIG’, ‘KLMN’, ‘OPQR’]
这里我们用 list()
将迭代器转换为列表
总结
map(function,iterable)函数接收两个参数,1、一个函数名,注意不带括号。带括号就变成调用函数了。2、一个或多个序列。序列中的每一个元素被函数作用后的值,返回一个迭代器。可以使用list()将其转换为列表
两个函数的参数是一样的,但是filter有过滤器作用,map对每一个元素进行函数运算。
filter(function,iterable)同样是两个参数,和上面一样。不同的是,序列里每个元素被函数作用后,返回真、假值,对应结果为真的序列元素值将被选出来,最终生成一个迭代器;并且,第一个参数可以是None,如果第一个参数是None,则将第二个参数序列中布尔值为True的元素给筛选出来。
两个函数的参数是一样的,但是filter有过滤器作用,map对每一个元素进行函数运算。