一道python面试题引发的血案

  这里说的是一道阿里校招的面试题:一行代码实现对列表a中的偶数位置的元素进行加3后求和?

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

  由于我已记不清列表a的模样, 所以我们先来定义一个列表 a = [2, 5, 7, 9, 34, 12]

  首先,我们要找到列表a中的偶数位置的元素, 在这里我们要用到的是filter函数( filter的具体使用方法这里就不讲了):

1 r = filter(lambda u: a.index(u) % 2 == 1, a)  # 为了拿到列表中元素的index值,                              调用list.index()。
2 print(list(r))                     # 结果为: [5, 9, 12]

  拿到了偶数位置的元素之后,要用到map函数对每个元素进行加3的操作:

1 s = map(lambda y:y+3, list(r))
2 print(list(s))                      # 结果为: [8, 12, 15]

  这样我们就对偶数位置的元素进行了加3,这里用sum函数最为简单,最后把完整的代码放上:

sum(list(map(lambda y: y+3, filter(lambda u: a.index(u) % 2 == 1, a))))   #结果:35

  上面这行代码已经可以解决问题了,另外我们还可以调用另一个高阶函数来完成求和,没错,就是reduce函数,在使用reduce函数之前,要先调用一下:

1 from functools import reduce    # 当然,这违背了一行代码解决问题的初衷
2 reduce(lambda x, y: x+y, map(lambda y:y+3, filter(lambda u: a.index(u)%2 == 1, a)))    #结果:35

  好了,说到这里,这道题目就算讲完了,如果你有更简单的方法,也请在留言中列出,大家互相交流,才能共同进步。

  什么,你问我血案在哪,当然是忽略并忘记它啦!!!

原文地址:https://www.cnblogs.com/jiaxiaoxin/p/8432576.html

时间: 2024-10-03 18:18:43

一道python面试题引发的血案的相关文章

一道Javascript面试题引发的血案

文章首发于szhshp的第三边境研究所,转载请注明 先来看几道面试题,公司的开发们都尝试做了一下,然而基本没有人能够全部答对. 覆盖的考点很多,也有一些难度,题目挺有意思建议手动执行一边玩玩. Question 1 for (var i = 0; i <5 ; i++) { setTimeout(function(){ console.log(i) ),1000} } console.log(i) Q:这道题目会输出什么? A:这道题目还比较简单,如果对Javascript稍微有一点深入的同学都

一道试题引发的血案 int *ptr2=(int *)((int)a+1);

某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下: int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2); return 0; } 问,在x86平台下输出啥? 题目虽然恶心了点,但作为一个例子来分析,还是挺好玩的.学过C语言的朋友可以暂且不看下文,自

一道搜狗笔试题引发的思考

一: 给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]. 在构造过程: 1.不允许使用除法: 2.要求O(1)空间复杂度和O(n)时间复杂度: 3.除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量.对空间和全局静态变量等): void makeArray(int a[],int b[],int len) { int i,j; b[0] = 1; for(i=1;i<len;i++) { b[i] = b[i-1]

一道Python面试题:给出d = [True, False, True, False, True],请利用列表d,只用一句话返回列表[0,2,4]

前言:还是我,一个不知死活的小白,冒着生命危险去了一家有逼格的公司面试,去面试的路上就经历了一番波折,公交车死等不来,最后差点误了面试时间,这都不算什么了,虽然对面试不抱什么希望,但在技术面被虐成了渣渣也确实打击了我的自信心,最后被面试官像看一个智障一样的看着(心疼自己半分钟). 看题:给出d = [True, False, True, False, True],请利用列表d,只用一句话返回列表[0,2,4] 这道题的关键是拿到True的索引值,最初我是用list的index方法搭配高阶函数fi

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

Python面试题 之前同事问了一道Python题目如下,暂时归类为面试题 题目:把类似'123.456'的字符串转换成浮点型数据 方法一: >>> print '{:.3f}'.format(float('123.456')) >>> 123.456 方法二:指定map.reduce高阶函数 思路:先处理小数点,然后在整数位.小数位相加.步骤如下 s = '123.456' 处理小数:使用字符串切片方式. s.split('.') 这样就得到长度为2的数组['123'

python公司面试题集锦 python面试题大全

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案 以上代码的

校花的贴身高手 第一卷 神奇的任务 第050章 一个篮球引发的血案(上)

第050章 一个篮球引发的血案(上) “嗷——”邹若明痛苦的嚎叫了一声,他的手腕已经被砸的脱臼了,篮球穿过了他的双手,直接向他的脸上拍去! “砰”,又是一声巨响,邹若明这次连嚎叫都没来得及嚎叫,就鼻孔飞血的倒在了地上,鲜血在空中划出了一道彩虹,很有冷酷的美感. 邹若明被直接拍的昏死了过去,一旁和他一起玩篮球的走狗们也都傻了眼了,这还是篮球么?简直就是炮弹了! 再看那个始作俑者,林逸很是没事儿人似的,拍了拍手上的灰尘,向教学楼继续走去.林逸心里暗暗不屑,和我装犊子呢?这次算是轻的了,要是还有下次,

一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁

前续 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(一)——地:起因 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁 平行时空 在复制好上面那一行我就先停下来了,算是先占了个位置,虽然我知道大概要怎么写,不过感觉还是很乱. 我突然想到,既然那么纠结,那么混乱,那么不知所措,我们不如换个视角.记得高中时看过的为数不多的长篇小说<穆斯林的葬礼>,作者是:霍达(女),故事描写了两个发生在不同时代.有着不同的内容却又交错扭结的爱情悲剧,一个是“玉”的故事,一个是“月”

python 面试题1

python 面试题 - 知识点整理 分类: python面试2013-03-05 15:52 13754人阅读 评论(1) 收藏 举报 python面试题 目录(?)[+] 1. 在判断object是否是class的instances时,type和isinstance函数的区别? type(obj) => <type 'instance'> type(cls) => <type 'classobj'> 由上可知,所有obj type后统一为 instance type