map-filter-reduce

2020-07-06 11:27:05 浏览数 (1)

map

先看下Python官方文档的说法

map(function, iterable, …),返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器。 如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。

见识一下

代码语言:javascript复制
>>> def cook(something):
...     if something == "cow":
...         return "hamburger"
...     elif something == "tomato":
...         return "chips"
...     elif something == "chicken":
...         return "ddrumstick"
...     elif something == "corn":
...         return "popcorn"
...
>>> list(map(cook, ["cow", "tomato", "chicken", "corn"]))
['hamburger', 'chips', 'ddrumstick', 'popcorn']

filter

也看下官方文档的说法

filter(function, iterable),用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器。iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。

也见识下

代码语言:javascript复制
>>> def isVegetarian(food):
...     check = ['chips', 'popcorn']
...     if food in check:
...         return True
...     else:
...         return False
...
>>> list(filter(isVegetarian, ['hamburger', 'chips', 'ddrumstick', 'popcorn']))
['chips', 'popcorn']

reduce

再看下官方文档

Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to >reduce the iterable to a single value.

见识下

代码语言:javascript复制
>>> from functools import reduce
>>> reduce(lambda x, y: x y, [1, 2, 3, 4, 5])
15

一图胜千言

曾看到过一张把filter、map、reduce描述得很透彻得图,真滴六?

references

  • Demonstrating map, filter, and reduce in Swift using food emoji
  • 函数式编程指引
  • functools.reduce
  • map

0 人点赞