Python中函数map()和reduce()的用法

这篇文章主要介绍了python中的map()函数和reduce()函数的用法,代码基于python2.x版本,需要的朋友可以参考下

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

如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。

我们先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

立即学习“Python免费学习笔记(深入)”;

2015427113120966.png (341×245)

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

>>> def f(x):...   return x * x...>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])[1, 4, 9, 16, 25, 36, 49, 64, 81]

登录后复制

map()传入的第一个参数是f,即函数对象本身。

你可能会想,不需要map()函数,写一个循环,也可以计算出结果:

L = []for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:  L.append(f(n))print L

登录后复制

的确可以,但是,从上面的循环代码,能一眼看明白“把f(x)作用在list的每一个元素并把结果生成一个新的list”吗?

所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:

>>> 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(x1, x2), x3), x4)

比方说对一个序列求和,就可以用reduce实现:

>>> def add(x, y):...   return x + y...>>> reduce(add, [1, 3, 5, 7, 9])25

登录后复制

当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。

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

>>> def fn(x, y):...   return x * 10 + y...>>> reduce(fn, [1, 3, 5, 7, 9])13579

登录后复制

这个例子本身没多大用处,但是,如果考虑到字符串str也是一个序列,对上面的例子稍加改动,配合map(),我们就可以写出把str转换为int的函数:

>>> def fn(x, y):...   return x * 10 + y...>>> def char2num(s):...   return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]...>>> reduce(fn, map(char2num, '13579'))13579

登录后复制

整理成一个str2int的函数就是:

def str2int(s):  def fn(x, y):    return x * 10 + y  def char2num(s):    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]  return reduce(fn, map(char2num, s))

登录后复制

还可以用lambda函数进一步简化成:

def char2num(s):  return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

登录后复制

def str2int(s):  return reduce(lambda x,y: x*10+y, map(char2num, s))

登录后复制

也就是说,假设Python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码!

练习

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。

Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积。

以上就是Python中函数map()和reduce()的用法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2277305.html

(0)
上一篇 2025年2月27日 15:54:51
下一篇 2025年2月26日 20:32:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 关于Python基础函数的介绍

    函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。 函数的定义 首先,我们要定义一个函数, 以说明这个函数的功能。 def squar…

    编程技术 2025年2月27日
    200
  • 详解Python函数的使用

    1.函数的基本定义 def 函数名称(参数) 执行语 return 返回值 登录后复制 def : 定义函数的关键字; 函数名称:顾名思义,就是函数的名字,可以用来调用函数,不能使用关键字来命名,做好是用这个函数的功能的英文名命名,可以采用…

    编程技术 2025年2月27日
    200
  • python中函数如何定义?python函数的调用方法介绍

    本篇文章给大家带来的内容是关于python中函数如何定义?python函数的调用方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码…

    编程技术 2025年2月27日
    200
  • python中函数部分内容的解析

    本篇文章给大家带来的内容是关于python中函数部分内容的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在python中,变量没有类型,一个对象的引用,类型属于对象变量的本质上是一个占位符!通常用小写字母命名变量。 …

    编程技术 2025年2月27日
    200
  • python函数(一)什么是函数

    接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。 一.函数的定义 在某些编程语言当中,函数声明和函数定义是区…

    2025年2月27日
    200
  • python函数的定义和调用是什么

    python函数的定义和调用:1、使用def关键字定义函数吗,代码为【def 函数名(参数1,参数2,参数3…)】;2、函数必须先定义,才能调用,否则会报错。 本教程操作环境:windows7系统、python3.9版,DELL…

    2025年2月26日
    200
  • 如何在Python中使用函数?

    python是一种通用、高级的编程语言,它是一种非常灵活和强大的语言,因为它具有许多内置函数,同时还可以编写自己的函数。编写函数可以在代码中实现重复使用代码的目的,这使得python成为一种非常实用的语言。在本文中,我们将讨论如何在pyth…

    编程技术 2025年2月26日
    200
  • Python中的匿名函数详解

    python中的匿名函数详解 Python是一种高级编程语言,面向对象,可扩展性强,在数学计算、数据处理等领域得到了广泛的应用。Python支持函数式编程,其中匿名函数是函数式编程很重要的一部分。本文将详细介绍Python中的匿名函数。 什…

    编程技术 2025年2月26日
    200
  • 如何解决Python的函数中的并发不安全错误?

    python是一门流行的高级编程语言,它具有简单易懂的语法、丰富的标准库和开源社区的支持,而且还支持多种编程范式,例如面向对象编程、函数式编程等。尤其是python在数据处理、机器学习、科学计算等领域有着广泛的应用。 然而,在多线程或多进程…

    编程技术 2025年2月26日
    200
  • 如何解决Python的函数返回值类型错误?

    python作为一门动态解释型语言,具有灵活的语法和强大的数据类型系统,但也因为这种特性,就存在着传递函数参数和返回值类型不匹配的情况。这种类型错误常见于复杂项目开发中,会导致程序崩溃或者产生不确定的结果。 在本文中,我们将介绍如何解决Py…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论