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 条评论
登录 后参与评论

相关文章

来自专栏吾爱乐享

java之学习Random类的概述和注意事项

793
来自专栏抠抠空间

集合 (set) 的增删改查及 copy()方法

简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点: 1、...

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

31:字符串中最长的连续出现的字符

31:字符串中最长的连续出现的字符 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 求一个字符串中最长的连续出现的字符,输...

3448
来自专栏Golang语言社区

Go语言数组

Go编程语言提供称为数组的数据结构,其可存储相同类型的元素的一个固定大小的连续集合。数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合。...

3387
来自专栏程序员互动联盟

【编程基础】C++ Primer快速入门五:实用的模板库

除上篇博客介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类 型标准库。包括 string 和 vector,它们分别定义了字符串和矢量(集合)。s...

2715
来自专栏水击三千

JavaScript正则表达式

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字...

27310
来自专栏owent

C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型

这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 template< class T > class std::r...

1133
来自专栏北京马哥教育

Python正则表达式的七个使用范例

作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别。 本文是一系列关于Pyth...

3285
来自专栏北京马哥教育

还不会Python正则表达式?看这篇文章试试

今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错。检索一下还真的找到了。 re模块 re.search 经常用match = re.search(p...

3206
来自专栏King_3的技术专栏

leetcode-896-单调数列

如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递...

1013

扫码关注云+社区