python 中map()函数的使用方法(重点),在python中map函数

  python 中map()函数的使用方法(重点),在python中map函数

  Python内建了map()和reduce()函数。

  让我们先看看地图。map()函数接收两个参数,一个是函数,另一个是Iterable。map将传入函数依次应用于序列的每个元素,并将结果作为新的迭代器返回。

  现在,我们用Python代码实现它:

  deff(x):returnx*x

  .r=map(f,[1,2,3,4,5,6,7,8,9])

  列表(r)

  [1,4,9,16,25,36,49,64,81]map()传入的第一个参数是f,f是函数对象本身。由于结果R是迭代器,迭代器是惰性序列,让它计算整个序列,通过list()函数返回一个列表。

  您可能认为也可以通过编写一个没有map()函数的循环来计算结果:

  L=[]fornin[1,2,3,4,5,6,7,8,9]

  附加(f(n))

  Print(L)确实是可以的,但是你能从上面的循环代码中一眼看出“将f(x)应用到列表的每一个元素,并将结果生成一个新的列表”吗?

  所以,map()是一个高阶函数,实际上它抽象了运算规则。因此,我们不仅可以计算简单的f(x)=x2,还可以计算任何复杂的函数,比如把这个列表中的所有数字都变成字符串:

  列表(map(str,[1,2,3,4,5,6,7,8,9]))

  [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]只需要一行代码。

  看看reduce的用法。Reduce对序列[x1,x2,x3,].这个函数必须接收两个参数。reduce继续计算结果,并对序列的下一个元素进行累积计算。其效果是:

  Reduce (f,[x1,x2,x3,x4])=f(f(f(f(x1,x2),x3),x4)比如对一个序列求和,可以用Reduce:

  fromfunctoolsimportreduce

  defadd(x,y):

  returnx y

  .

  Reduce(add,[1,3,5,7,9])25当然,你可以直接使用Python的内置函数sum()进行求和运算,所以没有必要使用Reduce。

  但是如果你想把序列[1,3,5,7,9]转换成整数13579,reduce可以派上用场:

  fromfunctoolsimportreduce

  deffn(x,y):

  .returnx*10 y

  .

  reduce(fn,[1,3,5,7,9])

  这个例子本身并不太有用。但是,如果我们考虑到字符串str也是一个序列,我们可以用map()稍微修改一下上面的例子,编写将str转换为int的函数:

  fromfunctoolsimportreduce

  deffn(x,y):

  .returnx*10 y

  .

  defchar 2 num :

  .digits={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}

  .return数字

  .

  reduce(fn,map(char2num, 13579 ))

  3579编译成str2int的作用是:

  fromfunctoolsimportreduce

  DIGITS={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}defstr2int(s):

  deffn(x,y):

  returnx * 10 ydefchar 2 num :

  Return digits [s] return reduce (fn,map (char2num,s))可以通过lambda函数进一步简化为:

  fromfunctoolsimportreduce

  DIGITS={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}defchar2num(s):

  return digits defstr 2 int :

  Return Reduce (Lambdax,y:x * 10y,map (Char2num,s))也就是说,假设Python不提供int()函数,你可以自己写一个把字符串转换成整数的函数,而且只需要几行代码。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: