Python内建函数map()和reduce()怎么用

  介绍

小编给大家分享一下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()怎么用