之前同事问到的一道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

时间: 2024-10-19 20:17:29

之前同事问到的一道python题目的相关文章

一道算法题目, 二行代码, Binary Tree

June 8, 2015 我最喜欢的一道算法题目, 二行代码. 编程序需要很强的逻辑思维, 多问几个为什么, 可不可以简化.想一想, 二行代码, 五分钟就可以搞定; 2015年网上大家热议的 Homebrew 的作者 Max Howell 面试 Google 挂掉的一题, 二叉树反转, 七行代码, 相比二行代码, 情有可原! Problem: return the count of binary tree with only one child 想一想, 你要写几行, 六七行, 或小于十行? S

一道简单题目的优化过程——抽签问题

题目来源:挑战程序设计竞赛 题目描述: 给定n个数字,选择四次,可以选择已经选择过的数字,问是否可以选出和为m的四个数. 首先,最基本的做法: 枚举四层,每一层枚举出一个数,求出所有四个数字不同的排列.时间复杂度为O(N^4). for (int i1=1;i1<=n;i++) for (int i2=i1;i2<=n;i2++) for (int i3=i2;i3<=n;i3++) for (int i4=i3;i4<=n;i4++) 让我们来一步步优化吧. 基本做法的本质是,枚

搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer

第一次见到这个题目,我觉得自己没学到java,太浅了,其实这个问题没有考synchronized关键字,只是考什么是对象? 1.在java编程思想的第二章有一句话; 一切都是对象,很可惜int,char 等不是的,虽然他们有他们的包装类,但是java还是保留了int 这些好用的原子类型, 对于synchronized后面可以跟对象和.class所以 字符串是对象可以,Integer对象可以,ExampleCLass.class可以. 我想问的是,数组是对象吗? 查了一下,是对象,所以数组也是答案

实习同事问的问题

实习下班,在地铁上,一起实习的同事问了我一个他自己随便想到的问题: 有n个人m种语言,每个人都会这m种语言中的若干语言(可能为零也可能是所有),所谓会,也即能听懂也能说.现在某个人掌握了一条信息,如果他用他会的某一种语言说出这条信息,则所有会这种语言的人都能领悟,并且他们各自将用自己所会的所有语言再复述这条信息,不断下去.试问,指定的那个人至少用多少种语言说出那条信息,可以使得最终所有人都能得到信息,或者判断这是不可能做到的. 我乍一想,应该可以用网络流解决本问题.但是当我仔细思考建模后,发现我

从一道趣味题目学习正则表达式

前天做了陈皓的趣味竞赛题目(fun.coolshell.cn),一直卡在第四道题目回文猫处不知所以然,看了微博上的提示,知道需要用正则表达式,但是不确定使用表达式的模式和原文,下面是第四道题的截图和链接,不看解析,你可以想到通关的办法吗? 看了答案,才知道source藏在网页的html源码中,曾经有过去看源码的念头,想作者不会这么geek吧,结果...就在源码中,下面是需要搜寻的网页的源码: <!-- h8:[email protected]:V<7Q3:]iqbn58\YoLGtweZus;

一道ioccc题目

国际C语言混乱大赛的一个题: main() {printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);} 这道题目输出的结果是:unix 很有意思的一道题.....本质还是数组和指针问题 一道ioccc题目

以另一种位图的思想来解决一道OJ题目

前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次.常见的例子不外乎在<编程珠玑>上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一遍输入数据而排序好的目的.这种思想是通用的么?也就是说,假如输入数据不再是0次或者1次,而是2次或者更多的时候,如何再次用上这种思想呢?请看下面题目 题目: 输入一个数组,数组有int类型整数若干,若有其中一个是出现一次或者两次,其他数字都是出现3次,要求在时间复杂度在O(N)上限里求出那个数字. 解法一

同事问的一个问题

今天同事问了一个问题,感觉比较有意思,保存一下. 问题是这样的.比如一个字符串,"123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",从中取任意个数的字符组成新的字符串,比如“2M”,然后+1,这是要得到结果是“2N”,如果是“ZZ”的话,得到的结果应该是“111”. 实现代码如下: import java.util.*; /** * @Author: bob * @Description: TODO * @Date: 2019/8/27 17:33 */ pub

一道python面试题引发的血案

这里说的是一道阿里校招的面试题:一行代码实现对列表a中的偶数位置的元素进行加3后求和? 今天去面试同样遇到了这个题目,这道题考察的是对python高阶函数map/filter的灵活运用(具体的使用方法可以参考'廖雪峰的官方网站').作为一个小白的我对高阶函数的运用本就不多,当时连高阶函数的名字都记不清了(书到用时方恨少),妥妥的被虐了个无路可走.无奈记下题目回来求助于度娘了,没想到是阿里的校招题目,网上也给出了答案,但是很明显该答案是存在一些问题的,具体什么问题在这里就不讲了,大家可以自行查找,