码迷,mamicode.com
首页 > 编程语言 > 详细

之前同事问到的一道python题目

时间:2017-08-07 01:31:44      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:字符串转换   数据   word   小数点   seq   reduce   替换   origin   .com   

Python面试题

之前同事问了一道Python题目如下,暂时归类为面试题

题目:把类似‘123.456‘的字符串转换成浮点型数据

  • 方法一:

    
      >>> print ‘{:.3f}‘.format(float(‘123.456‘))
      >>> 123.456
    
  • 方法二:指定mapreduce高阶函数

    思路:先处理小数点,然后在整数位、小数位相加。步骤如下

    s = ‘123.456‘

  1. 处理小数:使用字符串切片方式。

    s.split(‘.‘)

    这样就得到长度为2的数组[‘123‘, ‘456‘]

  2. 处理list中的第一个元素(整数列)。使用迭代的方式得到整数123

     def map_int(s):
         ‘‘‘
         @see: 迭代时把字符串转换成int类型
         ‘‘‘
         return int(s)
    

    然后使用高阶函数map(func, seq)对list中的字符串迭代:得到[1, 2, 3]

     map(map_int, s.split(‘.‘)[0])
    
  3. 使用高阶函数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

之前同事问到的一道python题目

标签:字符串转换   数据   word   小数点   seq   reduce   替换   origin   .com   

原文地址:http://www.cnblogs.com/xiaozi-autotestman/p/7296596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!