高阶函数map(),filter(),reduce()
接受函数作为参数,或者把函数作为结果返回的函数是高阶函数,官方叫做 Higher-order functions。
map()和filter()是内置函数。在python3中,reduce()已不再是内置函数,被放到了functools模块里面,这个函数最常用于求和。
另外,列表推导式和生成器表达式具有map()和filter()两个函数的功能,而且更易于阅读。
map()
在python3中,map()函数返回的是一个可迭代的map对象,可用list()函数转换为列表。
map()函数将参数序列中的元素传递给参数函数,然后将生成的结果返回组成新的可迭代对象。
map()函数可传递多个参数序列,运行方式与zip()函数类似,这里不再细说。
>>> help(map)
Help on class map in module builtins:
class map(object)
| map(func, *iterables) --> map object
|
| Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.
Return an iterator that applies function to every item of iterable, yielding the results.
If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted.
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])
<map object at 0x0000000002E86208>
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25]
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
<map object at 0x0000000002E86208>
>>> list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
[3, 7, 11, 15, 19]
filter()
在python3中,filter()函数返回的是一个可迭代的filter对象,同样可用list()函数转换为列表。
filter()函数用来过滤序列,参数函数为判断函数,参数序列中判断为真的元素返回组成新的可迭代对象。
>>> help(filter)
Help on class filter in module builtins:
class filter(object)
| filter(function or None, iterable) --> filter object
|
| Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true.
Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.
Note that filter(function, iterable) is equivalent to the generator expression (item for item in iterable if function(item)) if function is not None and (item for item in iterable if item) if function is None.
>>> filter(lambda x: x % 3, range(20))
<filter object at 0x0000000002B7DBE0>
>>> list(filter(lambda x: x % 3, range(20)))
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
reduce()
reduce()函数会对参数序列中的元素从左到右进行累积,最终reduce为单个value。
reduce()函数直接返回value,而不是迭代器。
>>> from functools import reduce
>>> help(reduce)
Help on built-in function reduce in module _functools:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence, from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5).
If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty.
>>> reduce(lambda x,y: x+y, [1,2,3,4,5])
15
reduce()函数的参数函数必须跟两个参数,完成从左到右累积。如果不是两个参数,会报 TypeError 异常。
>>> reduce(lambda x: x + 1, [1,2,3,4,5])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes 1 positional argument but 2 were given
参考:
https://docs.python.org/3/library/functools.html
https://docs.python.org/3/library/functions.html#map
https://docs.python.org/3/library/functions.html#filter
https://docs.python.org/3/library/functools.html#functools.reduce
高阶函数map(),filter(),reduce()的更多相关文章
- 高阶函数-map/filter/reduce
什么样的函数叫高阶函数: 条件:1.函数接受函数作为参数 2.函数的返回值中包含函数 高阶函数之----map函数 map(func, *iterables) --> map objectnum ...
- 高阶函数map,filter,reduce的用法
1.filter filter函数的主要用途是对数组元素进行过滤,并返回一个符合条件的元素的数组 let nums = [10,20,30,111,222,333] 选出nums中小于100的数: l ...
- Python高阶函数map、reduce、filter、sorted的应用
#-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...
- python的高阶函数(map,filter,sorted,reduce)
高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...
- 数组的高阶方法map filter reduce的使用
数组中常用的高阶方法: foreach map filter reduce some every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...
- js高阶函数map和reduce
map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...
- python之高阶函数--map()和reduce()
以下为学习笔记:来自廖雪峰的官方网站 1.高阶函数:简单来说是一个函数里面嵌入另一个函数 2.python内建的了map()和reduce()函数 map()函数接收两参数,一个是函数,一个是Iter ...
- python学习笔记1 -- 函数式编程之高阶函数 map 和reduce
我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def fw(参数)这种方式定义一个函数 python有很多的内置函 ...
- JS高阶函数--------map、reduce、filter
一.filter filter用于对数组进行过滤.它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 注意: filter() 不会对空数组进行检测. 注意: filter() ...
随机推荐
- SAP查询TABLE对应的文本表
SAP 取数时,通常配置项,需要取对应的文本描述,一般在配置表后加个T,就可以找到描述对应的表名. 但有时也有不符合这个规则的,例如生产订单类型数据表 T003O. 表名加T后并不存T003OT. 这 ...
- 20155308《网络对抗》Exp6 信息搜集与漏洞扫描
20155308<网络对抗>Exp6 信息搜集与漏洞扫描 原理与实践说明 实践内容 本实践的目标是掌握信息搜集的最基础技能.具体有: 各种搜索技巧的应用 DNS IP注册信息的查询 基本的 ...
- Linux下Maven+SVN自动打包脚本
公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...
- [agc011C]Squared Graph-[二分图]
Description 传送门 Solution 我们以下考虑的情况都是原图中非孤立的点. 题目要求新图的连通块个数.这个不好算,我们考虑计算新图的联通块内的特征点(x,y),即无法通过移动找到(t, ...
- vue-cli 3.0 图片路径问题(何时使用 public 文件夹)
1. 图片放入public文件夹下时 参考:https://cli.vuejs.org/zh/guide/html-and-static-assets.html#public-%E6%96%87%E4 ...
- CSS布局的一些技巧
max-width 通常使元素水平居中用的较多的方法为: #main { width: 600px; margin: 0 auto; } 但是,当浏览器窗口比元素的宽度还要窄时,浏览器会显示一个水平滚 ...
- [BZOJ1135][POI2009]Lyz[霍尔定理+线段树]
题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的 ...
- C#_备份sqlserver数据库
C# 代码备份数据库 ,不需要 其他 DLL protected void Button1_Click(object sender, EventArgs e) { /// ...
- Azkaban集群部署
一.部署模式 solo-server模式 (使用内置h2存储元数据): two-server模式 (1个webServer,1个execServer在同一服务器上,使用mysql存储元数据): mu ...
- C++:派生类的构造函数和析构函数的调用顺序
一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...