达内潍坊中心 > 达内新闻
「python」高阶函数map、reduce的介绍
- 发布:达内培训
- 来源:互联网
- 时间:2018-04-03 11:58
map
先看官方介绍:
map(function, iterable, …)
Return an iterator that applies function to every item of iterable, yielding the results.
map函数至少使用2个参数:(函数,可迭代对象),返回的结果是个迭代器。实现的作用是将前面的函数依次在后面的可迭代对象上执行。
>>> def ljds(x):
… return x+x
…
>>> a=[0,1,2,3,4,5,6,7,8,9]
>>> b=map(ljds,a)
>>> next(b)
0
>>> next(b)
2
>>> next(b)
4
>>> list(b)
[6, 8, 10, 12, 14, 16, 18]
>>>
代码介绍:函数ljds,参数x,作用是返回一个x加上自己的值。ljds(2)结果是4,ljds(‘梁家大叔’)结果是‘梁家大叔梁家大叔'.很基础,解释的有点多余…
a是个列表(可迭代对象)。当执行了3次next(b)后,(b是迭代器)此时的结果只有后面7个元素了,因此list(b)只输出了3-9的ljds(x)。
map还可以接受更多的参数,但第一位的函数只有一个,后面可以继续跟可迭代对象:
>>> def ljds(x,y):
… return (x+x,y+y)
…
>>> a=[1,2,3,4,5]
>>> b=[11,22,33,44,55]
>>> c=map(ljds,a,b)
>>> list(c)
[(2, 22), (4, 44), (6, 66), (8, 88), (10, 110)]
>>>
这个就没必要解释了。
reduce
官方介绍:
functools.reduce(function, iterable[, initializer])
Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value.
值得一提的是reduce在python2中可以直接使用,在python3中已经放在了fucntools模块里,用之前要先导入。
reduce调用的函数需要两个参数,依次使用可迭代对象的元素作为这个函数的参数,函数执行的结果和下一个元素再作为参数执行函数,依此类推。如果第一次执行时设置了initial,则是initial和第一个元素作为第一次执行的参数。可能容易晕,直接看代码演示吧。
以前学过一篇课文是讲数学家高斯的,他小时候做数学题,1+2+3……一直加到100,结果是多少,这题用reduce操作应该是这样的:
>>> from functools import reduce
>>> def ljds(x,y):
… return x+y
…
>>> a=[x for x in range(101)]
>>> reduce(ljds,a)
5050
>>>
代码解释:
导入reduce,创建一个函数ljds,需要2个参数x,y,返回x+y的结果。
a列表是数字从0到100,那么reduce执行的结果就是:
第一次:因没设置initial,所以ljds的参数就是列表a的最前面的2个元素,即0和1,相加结果是1.
第二次:第一次的结果1作为参数,第3个元素2也作为参数,即ljds(1,2),结果是3.
第三次:ljds(3,3)
……
一直到结束。
更多山东编程培训相关资讯,请扫描下方二维码
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 哈尔滨
- 济南
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 长沙
- 昆明
- 太原
- 无锡
- 石家庄
- 南宁
- 佛山
- 珠海
- 宁波
- 保定
- 呼和浩特
- 洛阳
- 烟台
- 运城
- 潍坊
「python」高阶函数map、reduce的介绍
- 发布:达内培训
- 来源:互联网
- 时间:2018-04-03 11:58
map
先看官方介绍:
map(function, iterable, …)
Return an iterator that applies function to every item of iterable, yielding the results.
map函数至少使用2个参数:(函数,可迭代对象),返回的结果是个迭代器。实现的作用是将前面的函数依次在后面的可迭代对象上执行。
>>> def ljds(x):
… return x+x
…
>>> a=[0,1,2,3,4,5,6,7,8,9]
>>> b=map(ljds,a)
>>> next(b)
0
>>> next(b)
2
>>> next(b)
4
>>> list(b)
[6, 8, 10, 12, 14, 16, 18]
>>>
代码介绍:函数ljds,参数x,作用是返回一个x加上自己的值。ljds(2)结果是4,ljds(‘梁家大叔’)结果是‘梁家大叔梁家大叔'.很基础,解释的有点多余…
a是个列表(可迭代对象)。当执行了3次next(b)后,(b是迭代器)此时的结果只有后面7个元素了,因此list(b)只输出了3-9的ljds(x)。
map还可以接受更多的参数,但第一位的函数只有一个,后面可以继续跟可迭代对象:
>>> def ljds(x,y):
… return (x+x,y+y)
…
>>> a=[1,2,3,4,5]
>>> b=[11,22,33,44,55]
>>> c=map(ljds,a,b)
>>> list(c)
[(2, 22), (4, 44), (6, 66), (8, 88), (10, 110)]
>>>
这个就没必要解释了。
reduce
官方介绍:
functools.reduce(function, iterable[, initializer])
Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value.
值得一提的是reduce在python2中可以直接使用,在python3中已经放在了fucntools模块里,用之前要先导入。
reduce调用的函数需要两个参数,依次使用可迭代对象的元素作为这个函数的参数,函数执行的结果和下一个元素再作为参数执行函数,依此类推。如果第一次执行时设置了initial,则是initial和第一个元素作为第一次执行的参数。可能容易晕,直接看代码演示吧。
以前学过一篇课文是讲数学家高斯的,他小时候做数学题,1+2+3……一直加到100,结果是多少,这题用reduce操作应该是这样的:
>>> from functools import reduce
>>> def ljds(x,y):
… return x+y
…
>>> a=[x for x in range(101)]
>>> reduce(ljds,a)
5050
>>>
代码解释:
导入reduce,创建一个函数ljds,需要2个参数x,y,返回x+y的结果。
a列表是数字从0到100,那么reduce执行的结果就是:
第一次:因没设置initial,所以ljds的参数就是列表a的最前面的2个元素,即0和1,相加结果是1.
第二次:第一次的结果1作为参数,第3个元素2也作为参数,即ljds(1,2),结果是3.
第三次:ljds(3,3)
……
一直到结束。
更多山东编程培训相关资讯,请扫描下方二维码
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 厦门
- 哈尔滨
- 济南
- 福州
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 大连
- 长沙
- 昆明
- 温州
- 太原
- 南昌
- 无锡
- 石家庄
- 南宁
- 中山
- 兰州
- 佛山
- 珠海
- 宁波
- 贵阳
- 保定
- 呼和浩特
- 东莞
- 洛阳
- 潍坊
- 烟台
- 运城