推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
eote
V2EX  ›  Python

对面试题的答案不服

  •  
  •   eote · Mar 25, 2016 · 6504 views
    This topic created in 3879 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    22 replies  •  2016-03-30 10:18:59 +08:00
    mhycy
    mhycy
    Mar 25, 2016
    1
    “用 Python 实现只保留 list 里个位数为 2 的数。”
    希望你的问题没写错
    thermal
    thermal
    Mar 25, 2016❤️2
    2
    难道不是 [x for x in list if x%10 == 2]
    quake0day
    quake0day
    Mar 25, 2016
    3
    为啥在厕所想出来的答案是 C 版本的?
    LPeJuN6lLsS9
    LPeJuN6lLsS9
    Mar 25, 2016
    4
    为什么不服?你没有实现 mod 的完整逻辑,只要数字一大你的逻辑就完蛋了……
    am241
    am241
    Mar 25, 2016
    5
    str [-1]的开销比%10 要大吧

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

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

    除非你的问题写错了,或者你落下了某些条件,比如数字非常大。
    billlee
    billlee
    Mar 25, 2016
    7
    @bp0 就算是 C, 把 x / 2 变成 x>>1 也应该是编译器做的事
    bp0
    bp0
    Mar 25, 2016
    8
    @billlee 哎,不全是的。只不过是现在很多编译器都能这么自动优化了而已。
    quake0day
    quake0day
    Mar 25, 2016
    9
    另外 lz 在厕所里面想出来的 mod10 的代码是错的。自己找几个 testcase (32 or 42)试试就知道了。
    SoloCompany
    SoloCompany
    Mar 26, 2016
    10
    讲道理
    你一个 python 针对 % 10 == 2 来做『优化』是脱裤子放屁的事情
    然而 10 并不是 2 的整数次幂,要不是在限定的有效位空间内能通过位移计算 mod10 那就是有鬼了,按照你的所谓思路,即使实现正确,所能覆盖的有效位空间顶多也就 8bit ,也就是可以覆盖穷举 0x00 ~ 0xff 内的有效数据,你拿个 0x100 也就是 256 代入进去计算下得出 256 % 10 = 0 就知道有多想当然了
    msg7086
    msg7086
    Mar 26, 2016❤️3
    11
    这就是典型的 正常代码 / 文艺代码 / 二逼代码 的区别了。
    fish267
    fish267
    Mar 26, 2016 via Android
    12
    @msg7086 哈哈哈哈哈
    ipconfiger
    ipconfiger
    Mar 26, 2016
    13
    终上所述, 楼主没做出来就是没做出来, 有啥理由不服
    Lonely
    Lonely
    Mar 26, 2016 via iPhone
    14
    @msg7086 😄
    emric
    emric
    Mar 26, 2016 via iPhone
    15
    是你肠胃不好
    111111111111
    111111111111
    Mar 26, 2016 via iPhone
    16
    求个位数为 2 ? %10?
    greatghoul
    greatghoul
    Mar 26, 2016
    17
    硬生生把代码从一行写成了 N 行你还好意思不服!
    realpg
    realpg
    Mar 26, 2016❤️1
    18
    @msg7086
    我觉得这是正常想装文艺结果二逼的典型……
    Mush
    Mush
    Mar 26, 2016
    19
    要知道, 这种代码很多时候是不 care 它跑的有多快, 考虑更多的是以后要维护呀亲. 代码是给人看的不是给机器看的, 在没有性能障碍的情况下, 写的易懂更好, 没必要绞尽脑汁写出一堆自以为很 fancy 实际上没有什么卵用的代码. 我不相信你这.c 能用到常见场景下的生产环境中去.
    hitmanx
    hitmanx
    Mar 28, 2016
    20
    同学,这是送分题...
    xiahei
    xiahei
    Mar 30, 2016
    21
    @hitmanx 加个‘们’,‘同学们,这是送分题啊!’
    hitmanx
    hitmanx
    Mar 30, 2016
    22
    @xiahei 还是你这个有现场感多了!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 07:07 · PVG 15:07 · LAX 23:07 · JFK 02:07
    ♥ Do have faith in what you're doing.