问题来源于廖雪峰老师的Python课:
利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456:
from functools import reduce
def str2float(s):
我本来的思路是利用map将字符串中每个元素转换成整型,记录’.'的位置,然后再用除法
但问题在于这样其实没有用到reduce函数,看到评论区有大佬是这样写的:
DIGITS = {‘0’: 0, ‘1’: 1, ‘2’: 2, ‘3’: 3, ‘4’: 4, ‘5’: 5, ‘6’: 6, ‘7’: 7, ‘8’: 8, ‘9’: 9}
```python
def str2float(s):
def char2num(s):
return DIGITS[s]
s0 = s.find('.')#判断小数位置
s1 = reduce(lambda x, y: x * 10 + y , map(char2num, s[:s0]))#左边
s2 = reduce(lambda x, y: x * 10 + y , map(char2num, s[s0+1:]))*0.1**(len(s)-s0-1)#右边
return s1+s2
其用find函数来确定小数位置,然后对小数点前和小数点后的进行切片,后再加起来。