Python面试题
之前同事问了一道Python题目如下,暂时归类为面试题
题目:把类似'123.456'
的字符串转换成浮点型数据
-
方法一:
>>> print '{:.3f}'.format(float('123.456'))
>>> 123.456 -
方法二:指定
map
、reduce
高阶函数思路:先处理小数点,然后在整数位、小数位相加。步骤如下
s = '123.456'
-
处理小数:使用字符串切片方式。
s.split('.')
这样就得到长度为
2
的数组['123', '456']
-
处理list中的第一个元素(整数列)。使用迭代的方式得到整数
123
def map_int(s):
'''
@see: 迭代时把字符串转换成int类型
'''
return int(s)然后使用高阶函数
map(func, seq)
对list中的字符串迭代:得到[1, 2, 3]
map(map_int, s.split('.')[0])
-
使用高阶函数
reduce(func, seq)
,对map()
后的数据累积得到123
reduce(lambda x,y : x*10 + y, map(map_int, s.split('.')[0]))
同样的方法处理小数位
reduce(lambda x,y : x*0.1 + y, map(map_int, s.split('.')[1][::-1])) * 0.1
-
整个代码块如下:或者直接把map_int()函数替换为:lambda x:int(x)
def map_int(s):
'''
@see: 迭代时把字符串转换成int类型
'''
return int(s)
reduce(lambda x,y : x*10 + y, map(map_int, s.split('.')[0])) + reduce(lambda x,y : x*0.1 + y, map(map_int, s.split('.')[1][::-1])) * 0.1
generated by haroopad