手记

【面试趣谈】python的map和 filter

​# 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对每一个元素进行函数运算。

0人推荐
随时随地看视频
慕课网APP