0%

python的map()和 filter()

map() 和 filter()

Python 内置有两个非常好用的高阶函数 map()filter()

filter() 用于从可迭代对象中筛选元素。用法如下:

1
filter(筛选函数, 可迭代对象)

filter() 依次对 可迭代对象 中的每个元素调用 筛选函数,如果返回值为 True,则当前这个元素会被保留,否则被排除。最终返回一个包含所有被保留元素的迭代器。

显然这里的 筛选函数 可以用 lambda 表达式来创建。

例如,从 ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'] 筛选出长度为奇数的字符串。可以这样写:

1
filter(lambda x: len(x) % 2 == 1, ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])
1
2
>>> list(filter(lambda x: len(x) % 2 == 1, [‘a’, ‘b’, ‘cd’, ‘efg’, ‘hig’, ‘klmn’, ‘opqr’]))
[‘a’, ‘b’, ‘efg’, ‘hig’]

这里我们用 list() 将迭代器转换为列表。

map() 用于对可迭代对象中每一个元素逐一作处理。用法如下:

1
map(处理函数, 可迭代对象)

map()依次对可迭代对象中的每个元素调用处理函数,最终返回一个包含所有被处理过后的元素的迭代器。

显然这里的处理函数也可以用 lambda 表达式来创建。

例如,将['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr']全部转换为大写。可以这样来写:

1
map(lambda x: x.upper(), ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])
1
2
>>> list(map(lambda x: x.upper(), [‘a’, ‘b’, ‘cd’, ‘efg’, ‘hig’, ‘klmn’, ‘opqr’]))
[‘A’, ‘B’, ‘CD’, ‘EFG’, ‘HIG’, ‘KLMN’, ‘OPQR’]

这里我们用 list() 将迭代器转换为列表