首页 > 编程语言 > 详细

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

时间:2017-08-07 00:54:19      阅读:212      评论:0      收藏:0      [点我收藏+]

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题目

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!