Python学习笔记__4.1.1章 map/reduce

# 这是学习廖雪峰老师python教程的学习笔记

1、map函数

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

# 比如有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上

>>> def f(x):

...     return x * x

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))  # 由于map返回的结果是Iterator,因此通过list()函数让它把整个序列都计算出来并返回一个list

2、reduce函数

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

reduce(f, [x1, x2, x3, x4]) = f(     f(   f(x1, x2),    x3),      x4)

# 将“13579” 变为 13579

from functools import reduce

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

方法一:

def str2int(s):

def fn(x, y):

return x * 10 + y

def char2num(s):

return DIGITS[s]

return reduce(fn, map(char2num, s))  # map(char2num, s)  将字符串转化为 单个int

方法二:

def char2num(s):

return DIGITS[s]

def str2int(s):

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

x, y:需要传入的参数

x * 10 + y:计算式

map(char2num, s):list组,参数的来源

reduce:累积计算

2、例题

1、利用map()函数,list变为首字母大写,其他小写的规范。

输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

# -*- coding: utf-8 -*-

def normalize(name):

return str.capitalize(name)   #  str_capitailize(),将str转化为首字母大写其余小写

L1 = ['adam', 'LISA', 'barT']

L2 = list(map(normalize, L1))

print(L2)

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

# -*- coding: utf-8 -*-

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:

# -*- coding: utf-8 -*-

from functools import reduce

def str2float(s):

digest={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6}  # 定义str 对应的 int

gt,lt=s.split('.')   # 切割字符,s.split('.'),以 . 为分割符

length=len(lt)

def char2sum(x):

return digest[x]

gt=reduce(lambda x,y:x*10+y,map(char2sum,gt))

lt=reduce(lambda x,y:x*10+y,map(char2sum,lt))

lt=lt/pow(10,length)   # pow(x,y) ,计算 x的 y次方

return gt+lt

原文地址:http://blog.51cto.com/12758568/2115994

时间: 2024-10-07 07:26:55

Python学习笔记__4.1.1章 map/reduce的相关文章

Python学习笔记__4.1.2章 filter

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 Python内建的filter()函数用于过滤序列 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. # 在一个list中,删掉偶数,只保留奇数 def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10,

Python学习笔记__4.3章 匿名函数(简洁函数)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 关键字lambda表示匿名函数 list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 列表生成式中的 lambda 实际就是 def f(x): return x * x 但匿名函数有个限制,就是只能有一个表达式. 匿名函数不用写return,返回值就是该表达式的结果 匿名函数因为函数没有名字,不必担心函数名冲突. 此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量

Python学习笔记__4.1章 高阶函数

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们知道Python内置的求绝对值的函数是abs() # 调用abs()函数可以获得一个值 >>> abs(-10) 10 # 那么,只写abs本身呢 >>> abs <built-in function abs> 可见,abs(-10)是函数调用,而abs是函数本身 1.1.将函数赋给变量 将函数赋给变量只有两种情况: 把函数计算得到的 结果 赋给变量 f=abs(-10) 把 函数本身 赋给变量

Python学习笔记__4.5章 偏函数(绑定函数参数)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 偏函数(Partial function)是functools模块的一个功能 functools.partial的作用就是,在一个已存在的函数基础上.把它的某些参数给固定住(也就是设置默认值),然后返回一个新的函数,调用这个新函数会更简单. 1.1.functools. partial 应用 已知: int 函数可以将 '123' --> 123. int 的 base 参数可以做 N 进制的转换 >>> int('123

Python学习笔记__4.4章 装饰器(添加额外功能)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 装饰器可以帮助我们为已经存在的对象添加额外的功能 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 装饰器经常用于有切面需求的场景,比如:插入日志.性能测试.事物处理.缓存.权限校验等场景. 1.1.为now函数 加一行日志 # 定义now函数 def now(): print('2018-5-8') # 编辑decorator def log(func):

Python学习笔记__4.2章 返回函数

# 这是学习廖雪峰老师python教程的学习笔记 1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. # 累加函数 def external(*args): def internal(): ax = 0 for n in args: ax = ax + n return ax return internal  # external的返回值是internal # 调用external() f = external(1, 3, 5, 7, 9)   #这里的 f是一

流畅python学习笔记:第十一章:抽象基类

__getitem__实现可迭代对象.要将一个对象变成一个可迭代的对象,通常都要实现__iter__.但是如果没有__iter__的话,实现了__getitem__也可以实现迭代.我们还是用第一章扑克牌的例子来看下 class FrenchDeck:     ranks=[str(n) for n in range(2,11)] + list('JQKA')     suits='spades diamonds clubs hearts'.split()     def __init__(sel

流畅python学习笔记:第十三章:重载运算符__add__,__iadd__,__radd__,__mul__,__rmul__,__neg__,__eq__,__invert__,__pos__

在前面第十章以及第一章的时候介绍了Vector对象的运算符重载.第十三章专门介绍运算符重载.这里我们看几个之前没讲过的运算符__neg__,__pos__,__invert__ class Vector(object):     def __init__(self,x):         self.x=x     def __neg__(self):         return "Vector(%d)" % (-self.x)     def __str__(self):      

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho