0
点赞
收藏
分享

微信扫一扫

[廖雪峰python教程map/reduce练习题]利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456


题目链接

​​https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317852443934a86aa5bb5ea47fbbd5f35282b331335000#0​​

正确实践

def fn(x,y):
return x*10+y
#n = s.index['.']
n=s.index('.')
s1 = list(map(int,[x for x in s[:n]]))
s2 = list(map(int,[x for x in s[n+1:]]))
return reduce(fn,s1) + reduce(fn,s2)/10**len(s2)

参考教程:

链接教程解析:

这个答案非原创,也是某位前辈写的。

1行,从 functools 包里调用 reduce

3-4行,定义一个 fn() 函数,用来把S1,S2这两个list里面的元素变成一个数。

5行,很关键的一步,利用 index() 函数确定字符串 S 中 ‘.’的位置。

6-7行,先利用切片把我们传入的 str 分成以前以后两个部分(其实就是根据小数点分成整数和浮点数,分别处理),然后再把切割好的 str 利用 int 变成整数,map() 函数负责把 int 作用到截取的 str 的每个元素中去。

8行,就说一个知识点,其他的都很好理解,m**n 这个表达的就是 m 的 n 次方。

我的深度解析

[x for x in s[:n]]是Iterable可迭代对象,不能省略成 x for x in s[:n]
n = s.index['.']这个错误比较隐蔽
n=s.index('.')这个才是正确的
s1 = list(map(int,[x for x in s[:n]]))这个list不能省略,因为后面的len(s2)不能由map(int,[x for x in s[:n]])得到





举报

相关推荐

0 条评论