Python中的Map/Reduce
MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
然而在python中,map就是 :将一个函数映射到所有可枚举类型上,reduce就是归约。
- #map/reduce
- from functools import reduce
- print(list(map(str,[-1,-2,-3,-4,-5])))
- def fn(x, y):
- print(x, y)
- return x*10 + y
- r = reduce(fn,[1,3,5,7,9])
- print(r)
- def func_sum(x, y):
- return x + y
- def square(x):
- return x*x
- list_r = map(square,[-1,-2,-3,-4,-5])
- ll_r = list(list_r)
- print('r = ',ll_r)
- ans = reduce(func_sum, ll_r)
- print('sum is ',ans)
- def add_100(a, b, c):
- print(a,b,c)
- return a * 10000+ b *100 + c
- list1 = [11,22,33]
- list2 = [44,55,66]
- list3 = [77,88,99]
- rec = map(add_100,list1, list2, list3)
- print(list(rec))
- from functools import reduce
- def fn(x, y):
- print(x, y)
- return x * 10 + y
- def char2num(s):
- return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
- '''{} is a dictionary, [] is index of dict, so [key] return value'''
- print(reduce(fn, map(char2num, '')))
- def str2int(s):
- def fn(x, y):
- return x * 10 + y
- def char2num(s):
- return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
- return reduce(fn, map(char2num, s))
- print(str2int(''))
- print(int(''))
- print(str(13572))
- def str2int_(s):
- def char2num(s):
- return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
- return reduce(lambda x,y: x * 10 + y, map(char2num, s))
- '''lambda 匿名函数,有些简单函数只需要用1次,所以不给起名字'''
- print(str2int_(''))
- #联系
- #1 规范化英文名
- def normalize(name):
- return name.capitalize()
- L1 = ['adam', 'LISA', 'barT']
- L2 = list(map(normalize, L1))
- print(L2)
- #2 请编写一个prod()函数,可以接受一个list并利用reduce()求积:
- from functools import reduce
- def prod(L):
- return reduce(lambda x,y : x * y, L)
- print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
- #3 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:
- from functools import reduce
- def str2float(s):
- def char2num(s):
- return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
- pos = s.find('.')
- s_num = s.split('.')[0] + s.split('.')[1]
- print(pos, s_num)
- L = reduce(lambda x,y : x * 10 + y, map(char2num, s_num))
- return L/ math.pow(10, pos)
- print('str2float(\'123.456\') =', str2float('123.456'))
- #Another solution
- def str2float_(s):
- def char2num(s):
- return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
- a, b = s.split('.')
- L = reduce(lambda x,y: x * 10 + y, map(char2num, a + b))
- return L/10**len(b)
- print('str2float(\'123.456\') =', str2float('123.456'))
以上代码都是liaoxuefeng教程中的内容实现和练习题。
Python中的Map/Reduce的更多相关文章
- python中lambda,map,reduce,filter,zip函数
函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...
- Python中 filter | map | reduce | lambda的用法
1.filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tupl ...
- python 中的map(), reduce(), filter
据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...
- Python 中的 map, reduce, zip, filter, lambda基本使用方法
map(function, sequence[, sequence, ...] 该函数是对sequence中的每个成员调用一次function函数,如果参数有多个,则对每个sequence中对应的元素 ...
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下 Py ...
- Python高级教程-Map/Reduce
Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...
- python 中的map 详解
python中的map函数应用于每一个可迭代的项,返回的是一个结果list.如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理.map()函数接收两个参数,一个是函 ...
- python中的map()函数
MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, .. ...
- js中map和python中的map
js 中的map: 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow( ...
随机推荐
- codeforces 373 A - Efim and Strange Grade(算数模拟)
codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...
- Spring 源码学习(一)
工作好多年了,越来越心浮气躁了,好多东西都是一知半解的,所以现在需要静下心来好好学习一门技术. 就选Spring了, spring 设计java 开发的方方面面. 期待目标 对Spring 有个更深层 ...
- 【Codeforces 411A】Password Check
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 傻逼模拟题 [代码] import java.io.*; import java.util.*; public class Main { st ...
- JavaSE 学习笔记之API(二十一)
API--- java.lang.Runtime: 类中没有构造方法,不能创建对象. 但是有非静态方法.说明该类中应该定义好了对象,并可以通过一个static方法获取这个对象.用这个对象来调用非静态方 ...
- Inversion
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4176 Accepted: 1857 Description The i ...
- my first emacs custom key binding
(defun comment-this-level () (interactive) (move-beginning-of-line 1) (set-mark-command nil) (fo ...
- Ubuntu 16.04安装PPA图形化管理工具Y PPA Manager
安装: sudo add-apt-repository ppa:webupd8team/y-ppa-manager sudo apt-get update sudo apt-get install y ...
- Angularjs中添加HighCharts
一. 添加基本配置 1. 添加指令 angular.module('newApp') .directive('dpHighchart', ['$rootScope', function($rootSc ...
- 【python】range的用法
range的用法: >>> range(1,5) #代表从1到5(不包含5)[1, 2, 3, 4]>>> range(1,5,2) #代表从1到5,间隔2(不包含 ...
- C++学习之new与delete、malloc与free
在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了.这篇文章仅仅是浅显的讲一下,仅供参考. 一.new ...