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” 配置邮箱 ...
随机推荐
- Redis部署与基本操作
1.安装 1)不指定安装位置,则会把redis的可执行文件安装到 redis-2.8.6/src/目录下 [root@CentOS6 ~]# ls anaconda-ks.cfg httpd-2. ...
- spring源码研究1 如何导入源码
环境 jdk8 windows8 1.下载源码 https://github.com/spring-projects/spring-framework 2.编译为eclipse项目 源码下载无法直接导 ...
- WIN10-缩放与布局
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI230%----- 221225%----- 218220%----- ...
- MySQL:数据库的基本操作
第二篇.数据库的基本操作 一.创建数据库 附:创建数据库并不意味输入数据在这个数据库中,只有用切换数据库才可以输数据到这个数据库中. 1.创建数据库 格式:create database数据库名字 [ ...
- thinkphp5.1学习笔记
由于新公司使用的框架是thinkphp5.1,有必要进一步学习,看来我要把php框架使用完全了,之前就用过laravel和CI框架了. 现在打算只是一个学习的记录,结构会比较凌乱,基本我估计只能自己看 ...
- 5-log4j2.xml配置文件各个节点详解
具体配置参考官网:http://logging.apache.org/log4j/2.x/manual/configuration.html 一.log.xml文件的大致结构 <?xml ver ...
- Vue数组操作不刷新视图问题的解决
最近使用Vue2.0开发项目,有一个列表使用v-for绑定到数组,按照Vue的推荐方案,使用push.splice.this.$set三个变异方法操作数组.发现在添加页面,三个方法都能及时刷新视图:但 ...
- mysql基础查询语法
一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...
- QueryString中的加号变成空格解决方法
通过Request.QueryString["CheckItem"]的方式调用值的时候,数值中的加号“+”会转换为空格“ ” 例如传输“ABC+EFG”,就会取到“ABC EFG” ...
- natapp 穿透访问 vue项目 Invalid Host header
由于要近期开发微信小程序,所以今天了解了一下这个netapp 内网映射这个东西,所以一开始自己就在网上看,然后想把环境部署起来,参考https://natapp.cn/ ,看了一分钟教程以后,然后自己 ...