推荐学习书目
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 · 6087 views
    This topic created in 3728 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
        1
    mhycy  
       Mar 25, 2016
    “用 Python 实现只保留 list 里个位数为 2 的数。”
    希望你的问题没写错
    thermal
        2
    thermal  
       Mar 25, 2016   ❤️ 2
    难道不是 [x for x in list if x%10 == 2]
    quake0day
        3
    quake0day  
       Mar 25, 2016
    为啥在厕所想出来的答案是 C 版本的?
    LPeJuN6lLsS9
        4
    LPeJuN6lLsS9  
       Mar 25, 2016
    为什么不服?你没有实现 mod 的完整逻辑,只要数字一大你的逻辑就完蛋了……
    am241
        5
    am241  
       Mar 25, 2016
    str [-1]的开销比%10 要大吧

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

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

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