热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Python面试题之前同事问了一道Python题目如下,暂时归类为面试题题目:把类似123.456的字符串转换成浮点型数据方法一:>>>print

Python面试题

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

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

  • 方法一:


    >>> print '{:.3f}'.format(float('123.456'))
    >>> 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)
    "> def map_int(s):
    '''
    @see: 迭代时把字符串转换成int类型
    '''
    return int(s)

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

     map(map_int, s.split('.')[0])
    "> 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*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
    "> 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
    "> 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


推荐阅读
author-avatar
手机用户2502896851
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有