python-廖雪峰,map/reduce学习笔记
# _*_ coding:utf-8 _*_
from functools import reduce
def str2int(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} #定义一个字典
def f(x, y):
return x *10 + y # 返回值 def char2num(s):
return digits[s] # 函数接收key,返回值是字典里对应的value,如:如果s == '1', 则返回值是 1 return reduce(f, map(char2num, s)) print(str2int('12345'))
==》12345 #输入的s是str,输出的是int 解析:
1、 map(char2num, '12345')将得到一个生产器,这个生成器生成的值【1, 2, 3, 4, 5】
2、reduce(f, [1, 2, 3, 4, 5]
==>(((1*10+2)*10+3)*10+4)*10+5=12345 用lambda函数来实现:
# _*_ coding:utf-8 _*_
from functools import reduce def str2int(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} #定义一个字典 def char2mun(s):
return digits[s] # 函数接收key,返回值是对应的value return reduce(lambda x, y: x * 10 + y, map(char2mun, s)) print(str2int('668'))==》668
作业:
1、利用map()
函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT']
,输出:['Adam', 'Lisa', 'Bart']
:
我自己写的:
def normalize(name):
s = name.lower()
s1 = s[0].upper()
i = 1
while i < len(s):
s1 = s1 + s[i]
i += 1
return s1 别人写的(膜拜,能用一行代码搞定的,不要用两行):
def normalized2(name):
return name[0].upper() + name[1:].lower()
2、 Python提供的sum()
函数可以接受一个list并求和,请编写一个prod()
函数,可以接受一个list并利用reduce()
求积:
我写的:
def prod(L):
def multiple(x, y):
return x * y
return(reduce(multiple, L)) 别人写的(总是能写的比我好太多,我就没有想到):
def prod(L):
return reduce(lambda x, y:x*y,L)
3. 利用map
和reduce
编写一个str2float
函数,把字符串'123.456'
转换成浮点数123.456
:
# coding=utf-8
from functools import reduce def str2float(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} #定义字典 def str2num(s):
return digits[s] #提取字典的值 str1 = s.split('.')[0] #获取整数部分字符串
str2 = s.split('.')[1] #获取小数部分字符串
flo1 = reduce(lambda x, y: x * 10 + y, map(str2num, str1))
flo2 = reduce(lambda x, y: x * 10 + y, map(str2num, str2))/10**len(str2)
return flo1 + flo2 print('str2float(\'123.456\')= ', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.0001:
print('pass')
else:
print('failed')
python-廖雪峰,map/reduce学习笔记的更多相关文章
- 廖雪峰 Git教程学习笔记 原文 http://www.liaoxuefeng.com/
一 .集中式与分布式 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推 ...
- 廖雪峰git教程学习笔记3
commit是一串不便记忆的数字,为了方便记忆,引入tag,tag就跟HEAD一样,就像一个指针,指向commit,且指向是不能变得,一个commit就有一个tag 给当前分支下的当前commit打上 ...
- 廖雪峰git教程学习笔记2
本地git仓库和github仓库之间的传输是通过SSH加密的,所以: 注册GitHub账号 创建SSH key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id ...
- 廖雪峰git教程学习笔记
对git来说,没有消息就是最好的消息 使用 git init 把当前目录变为git仓库 要在仓库里加入文件,先在仓库目录新建这个文件后,比如新建一个文件xiaobai.txt,内容为: 在命令行里输入 ...
- Git-第五篇廖雪峰Git教程学习笔记(4)分支
1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...
- Git-第四篇廖雪峰Git教程学习笔记(3)远程仓库,克隆远端库
1.本次连接的是gitHub仓库. 1>创建SSH Key. ssh-keygen -t rsa -C "youremail@example.com" lfy@lfy-PC ...
- Git-第三篇廖雪峰Git教程学习笔记(2)回退修改,恢复文件
1.工作区 C:\fyliu\lfyTemp\gitLocalRepository\yangjie 2.版本库 我们使用git init命令创建的.git就是我们的版本库.Git的版本库里存了很多东西 ...
- Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退
1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...
- 廖雪峰的git学习笔记
安装完后,每个机器都要自报家门 Config--配置 global--全局参数 配置全局用户名 $git config --global user.name “Your Name” 配置邮箱 ...
随机推荐
- Dll重定向(尚存否?)
windows核心编程(第五版)的20.6节介绍了Dll重定向. 0x01 Dll重定向简介 产生Dll重定向原因: 应用程序 a.exe 依赖动态链接库 compoent.dll 1.0 版本.但 ...
- mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long'
mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long' 当使用mybatis进行传参的时候 ...
- pytest的执行规则和顺序
用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...
- setcookie
cookie 中值的部分在发送的时候会被自动用 urlencode 编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量 首先声明,浏览的Cookie操作都是通过HTTP Head ...
- Mysql数据库文件迁移并修改默认数据文件存储位置
环境: 1.两台Win10电脑 2.MySql5.6 过程: 1.原电脑停止MySql服务 2.复制C:\ProgramData\MySQL\MySQL Server 5.6\data文件夹到目标电脑 ...
- 2019-04-04-day026-模块和包的导入
课前 估分 重新做题 思考为什么 积累问题 提前了解你的情况 40分以下 选课系统 按照反射那个版本 把反射的逻辑看明白 接着把逻辑填完整 用上pickle logging写日志 进阶 : 用软件开发 ...
- 2--Python入门--Python数据集合类型--列表
在基础数据类型的基础上,Python有6中数据集合的类型: 列表list,最常用的数据类型,以[]为标识 元组tuple,和list很相似,但是不能二次赋值,用()标识 集合set,和list类似,但 ...
- HSTS 与 307 状态码
最近线上产品突然在 Chrome 浏览器上出现 307 状态码,并跳转到 https 版.由于 https 尚未部署完毕,导致了相当严重的后果. 但是 307 代码是什么含义呢?页面又为何会出现 30 ...
- 20165228 2017-2018-2 《Java程序设计》第4周学习总结
20165228 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 子类与继承 子类的定义:使用关键词extends class 子类名 extends 父类名 ...
- Jaxb如何优雅的处理CData
前言 Jaxb确实是xml和java对象映射互转的一大利器. 但是在处理CData内容块的时候, 还是有些小坑. 结合网上搜索的资料, 本文提供了一种解决的思路, 看看能否优雅地解决CData产出 ...