首页 > 代码库 > 之前同事问到的一道python题目

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

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