python基础----map和reduce

map和reduce

Map简单来说就是:一个映射函数就是对一些独立元素组成的概念上的列表的每一个元素进行指定的操作 Reduce简单来说就是:对一个列表的元素进行适当的合并

举两个小例子: (1)现在有一个python的list假设为A: A = [1,4,2,5,6,8,3],现在需要你对它们进行求和; 当然我们使用简单的sum()就可以搞定,不过我想说的是map和reduce的概念;我们知道求和的话,同时最简单的就是对两个数字进行add,所以可以这样: add(1,add(4,add(2,add(5,add(6,add(8,3))))) 这就是最简单的reduce操作,程序如下:

 def add(x,y):
    return x+y
reduce(add, [1,4,2,5,6,8,3])

返回29,操作正确

(2)对(1)中的A返回每个元素的平方; 当然你可以类似这样:

A = [1, 4, 3, 5, 6, 8, 3]
B = [x * x for x in A]

完全没问题,但是还可以这样做:

def f(x):
    return x*x
map(f,[1, 4, 3, 5, 6, 8, 3]) 

输出为:[1, 16, 9, 25, 36, 64, 9] 这就是最简单的map的思想啦

一个简单的小例子

将字符串转化为int值,不使用内置的int函数 使用map和reduce的代码如下:

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))

思路解析: (1)将获得传入字符串做成一个list; (2)使用map对list中的每个元素进行一一映射; (3)使用reduce进行combine(x*10+y)获得最终的结果值

测试:

>> str2int('1342')
>> 1342
>> str2int('1234567')
>> 1234567

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python把列表中的数字尽量等分成n份

问题描述:假设一个列表中含有若干整数,现在要求将其分成n个子列表,并使得各个子列表中的整数之和尽可能接近。 下面的代码并没有使用算法,而是直接将原始列表分成n...

57180
来自专栏技术碎碎念

LeetCode-15-3Sum

Given an array S of n integers, are there elements a, b, c in S such that a + b ...

395110
来自专栏书山有路勤为径

复杂的链表的深度拷贝

Copy List with Random Pointer 已知一个复杂的链表,节点中有一个指向本链表任意某个节点的碎甲指针(也可以为空),求这个链表的深度拷...

7710
来自专栏一英里广度一英寸深度的学习

Leetcode 第一题 《两数之和》

12010
来自专栏IMWeb前端团队

JavaScript强化教程——sort() 方法

本文作者:IMWeb 王军 原文出处:IMWeb社区 未经同意,禁止转载 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScr...

20450
来自专栏决胜机器学习

PHP数据结构(十七) ——内部排序综述

PHP数据结构(十七)——内部排序综述 (原创内容,转载请注明来源,谢谢) 一、稳定性 假设Ki=Kj(1<=i,j<=n,i!=j),且排在序列前的序列中R...

354120
来自专栏五分钟学算法

每天一算:Remove Nth Node From End of List

采取双重遍历肯定是可以解决问题的,但题目要求我们一次遍历解决问题,那我们的思路得发散一下。

17630
来自专栏GreenLeaves

C# params关键字

1、params关键字的作用 (1)、使用 params关键字可以指定一个方法参数,该方法参数的数目可变。 (2)、可以发送参数声明中所指定类型的逗号分隔的参数...

20460
来自专栏数据结构与算法

P3374 【模板】树状数组 1 单点修改与区间查询

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N...

30770
来自专栏magicsoar

Effective Modern C++翻译(4)-条款3:了解decltype

条款3 了解decltype decltype是一个有趣的东西,给它一个变量名或是一个表达式,decltype会告诉你这个变量名或是这个表达式的类型,通常,告诉...

20690

扫码关注云+社区

领取腾讯云代金券