对面试题的答案不服

2016-03-25 21:21:57 +08:00
 eote

之前去了一家公司面试,被问了用 Python 实现只保留 list 里个位数为 2 的数。面试的时候太过紧张一直在想怎么用位操作,最后就写了大概是如下思路的答案
https://gist.github.com/imAArtist/9a967e6a57003784ca1c

面试官给了以下思路的正确答案 https://gist.github.com/imAArtist/2ae7e390db715ad87472 并表示不能用位操作实现

今天上 厕所的时候突然想起这件事,思考了 5 分钟我想出了以下思路的答案。

https://gist.github.com/imAArtist/3dd6c672fa815bace6ee

所以,结论是吃太多香蕉会拉肚子

5342 次点击
所在节点    Python
22 条回复
mhycy
2016-03-25 21:26:46 +08:00
“用 Python 实现只保留 list 里个位数为 2 的数。”
希望你的问题没写错
thermal
2016-03-25 21:33:09 +08:00
难道不是 [x for x in list if x%10 == 2]
quake0day
2016-03-25 21:39:13 +08:00
为啥在厕所想出来的答案是 C 版本的?
LPeJuN6lLsS9
2016-03-25 22:14:43 +08:00
为什么不服?你没有实现 mod 的完整逻辑,只要数字一大你的逻辑就完蛋了……
am241
2016-03-25 22:25:00 +08:00
str [-1]的开销比%10 要大吧

另外你那一大堆 c 代码的开销应该也会比直接 % 10 要大
真想把速度做到极致,请取字节做 bcd 转换,我记得 x86 里有指令能直接完成这个操作
bp0
2016-03-25 23:01:13 +08:00
嵌入式 C 里面比较少用除法和取余数,是因为很多 MCU 做除法或取余数消耗的指令周期非常多。所以才会出现很多用位操作的优化,比如 x >>= 1 ,表示 x = x/2 。

但是你都用 python 了,还在乎这个?

除非你的问题写错了,或者你落下了某些条件,比如数字非常大。
billlee
2016-03-25 23:04:28 +08:00
@bp0 就算是 C, 把 x / 2 变成 x>>1 也应该是编译器做的事
bp0
2016-03-25 23:11:03 +08:00
@billlee 哎,不全是的。只不过是现在很多编译器都能这么自动优化了而已。
quake0day
2016-03-25 23:17:20 +08:00
另外 lz 在厕所里面想出来的 mod10 的代码是错的。自己找几个 testcase (32 or 42)试试就知道了。
SoloCompany
2016-03-26 00:16:37 +08:00
讲道理
你一个 python 针对 % 10 == 2 来做『优化』是脱裤子放屁的事情
然而 10 并不是 2 的整数次幂,要不是在限定的有效位空间内能通过位移计算 mod10 那就是有鬼了,按照你的所谓思路,即使实现正确,所能覆盖的有效位空间顶多也就 8bit ,也就是可以覆盖穷举 0x00 ~ 0xff 内的有效数据,你拿个 0x100 也就是 256 代入进去计算下得出 256 % 10 = 0 就知道有多想当然了
msg7086
2016-03-26 00:18:47 +08:00
这就是典型的 正常代码 / 文艺代码 / 二逼代码 的区别了。
fish267
2016-03-26 00:20:19 +08:00
@msg7086 哈哈哈哈哈
ipconfiger
2016-03-26 00:27:01 +08:00
终上所述, 楼主没做出来就是没做出来, 有啥理由不服
Lonely
2016-03-26 02:55:59 +08:00
@msg7086 😄
emric
2016-03-26 03:07:03 +08:00
是你肠胃不好
111111111111
2016-03-26 07:32:07 +08:00
求个位数为 2 ? %10?
greatghoul
2016-03-26 09:16:32 +08:00
硬生生把代码从一行写成了 N 行你还好意思不服!
realpg
2016-03-26 09:54:13 +08:00
@msg7086
我觉得这是正常想装文艺结果二逼的典型……
Mush
2016-03-26 15:18:49 +08:00
要知道, 这种代码很多时候是不 care 它跑的有多快, 考虑更多的是以后要维护呀亲. 代码是给人看的不是给机器看的, 在没有性能障碍的情况下, 写的易懂更好, 没必要绞尽脑汁写出一堆自以为很 fancy 实际上没有什么卵用的代码. 我不相信你这.c 能用到常见场景下的生产环境中去.
hitmanx
2016-03-28 15:33:28 +08:00
同学,这是送分题...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/266390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX