小编给大家分享一下Python内建函数map()和reduce()怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强> Python内建了map()和reduce()函数。强>
我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,地图将传入的函数依次作用到序列的每个元素,并把结果作为新的迭代器返回。
现在,我们用Python代码实现:
在祝辞祝辞,def f (x):…,,,,, return x * x ……在祝辞祝辞,r =,地图(f, [1,, 2,, 3,, 4, 5, 6, 7, 8, 9)) 在祝辞祝辞,列表(右) (1,4,9日,16日,25日,36岁,49岁,64年,81年)
地图()传入的第一个参数是f,即函数对象本身。由于结果r是一个迭代器,迭代器是惰性序列,因此通过列表()函数让它把整个序列都计算出来并返回一个列表。
你可能会想,不需要地图()函数,写一个循环,也可以计算出结果:
L =, [] for n 拷贝(1,,2,,3,,4,5,6,7,8,9): ,,,L.append (f (n)) 打印(L)
的确可以,但是,从上面的循环代码,能一眼看明白”把f (x)作用在列表的每一个元素并把结果生成一个新的名单”吗?
所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f (x)=x2,还可以计算任意复杂的函数,比如,把这个列表所有数字转为字符串:
在祝辞祝辞,列表(map (str, [1, 2, 3, 4, 5, 6, 7, 8, 9))) [& # 39;1 & # 39;,,& # 39;2 & # 39;,,& # 39;3 & # 39;,,& # 39;4 & # 39;,,& # 39;5 & # 39;,,& # 39;6 & # 39;,,& # 39;7 & # 39;,,& # 39;8 & # 39;,,& # 39;9 & # 39;]
只需要一行代码。
再看减少的用法.reduce把一个函数作用在一个序列(x1, x2, x3,……)上,这个函数必须接收两个参数,减少把结果继续和序列的下一个元素做累积计算,其效果就是:
减少(f,, (x1, x2, x3,, x4)),=, f (f (f (x1, x2), x3),, x4)
比方说对一个序列求和,就可以用减少实现:
在祝辞祝辞,得到functools import 减少 在祝辞祝辞,def 添加(x, y):…,,,,, ,,,,,,,return x + y … 祝辞祝辞祝辞,减少(添加、,(1,3,5,7,9])25
当然求和运算可以直接用Python内建函数总和(),没必要动用减少。
但是如果要把序列(1、3、5、7、9]变换成整数13579,减少就可以派上用场:
在祝辞祝辞,得到functools import 减少 在祝辞祝辞,def fn (x, y): ,,,,,,return x *, 10 +, y … 祝辞祝辞祝辞,减少(fn,, (1, 3, 5, 7, 9]) 13579年
这个例子本身没多大用处,但是,如果考虑到字符串str也是一个序列,对上面的例子稍加改动,配合映射(),我们就可以写出把str转换为int的函数:
在祝辞祝辞,得到functools import 减少 在祝辞祝辞,def fn (x, y): ,,,,,,return x *, 10 +, y … 在祝辞祝辞,def char2num (s): …,,,,,digits =,{& # 39; 0 & # 39;:, 0,, & # 39; 1 & # 39;,, 1,, & # 39; 2 & # 39;,, 2,, & # 39; 3 & # 39;:, 3, & # 39; 4 & # 39;:, 4, & # 39; 5 & # 39;:, 5日,& # 39;6 & # 39;:,6日,& # 39;7 & # 39;:,7日,& # 39;8 & # 39;:,8日,& # 39;9 & # 39;:,9} ,,,,,,return 数字[s] … 祝辞祝辞祝辞,减少(fn,地图(char2num, & # 39; 13579 & # 39;)) 13579年
整理成一个str2int的函数就是:
得到functools import 减少 DIGITS =,{& # 39; 0 & # 39;:, 0,, & # 39; 1 & # 39;,, 1,, & # 39; 2 & # 39;,, 2,, & # 39; 3 & # 39;:, 3, & # 39; 4 & # 39;:, 4, & # 39; 5 & # 39;:, 5日,& # 39;6 & # 39;:,6日,& # 39;7 & # 39;:,7日,& # 39;8 & # 39;:,8日,& # 39;9 & # 39;:,9}def str2int (s): ,,,def fn (x, y): ,,,,,,,return x *, 10, +, y ,,, def char2num (s): ,,,,,,,return 数字[s],,,, return 减少(fn,地图(char2num, s))
还可以用λ函数进一步简化成:
得到functools import 减少 DIGITS =,{& # 39; 0 & # 39;:, 0,, & # 39; 1 & # 39;,, 1,, & # 39; 2 & # 39;,, 2,, & # 39; 3 & # 39;:, 3, & # 39; 4 & # 39;:, 4, & # 39; 5 & # 39;:, 5日,& # 39;6 & # 39;:,6日,& # 39;7 & # 39;:,7日,& # 39;8 & # 39;:,8日,& # 39;9 & # 39;:,9}def char2num (s): ,,,return 数字[s] def str2int (s): ,,,return 减少(lambda , x,, y: x *, 10, +, y,,地图(char2num, s))Python内建函数map()和reduce()怎么用