列表理解与地图

  • 问题:
  • 有没有理由更喜欢使用map()而不是列表理解,或者反之亦然?它们中的一种通常比另一种更有效,还是被认为更具Python味?在

  • 答案:
  • 在某些情况下,map在显微镜下可能会更快(当您不是为此目的而生成lambda,而是在map和listcomp中使用相同的函数时)。在其他情况下,列表理解可能更快,而且大多数(并非所有)Python学家都认为它们更直接、更清晰

    使用完全相同的功能时,map的微小速度优势的一个例子:

    $ python -mtimeit -s'xs=range(10)' 'map(hex, xs)'
    100000 loops, best of 3: 4.86 usec per loop
    $ python -mtimeit -s'xs=range(10)' '[hex(x) for x in xs]'
    100000 loops, best of 3: 5.58 usec per loop

    在map需要lambda时性能比较如何完全颠倒的示例:

    $ python -mtimeit -s'xs=range(10)' 'map(lambda x: x+2, xs)'
    100000 loops, best of 3: 4.24 usec per loop
    $ python -mtimeit -s'xs=range(10)' '[x+2 for x in xs]'
    100000 loops, best of 3: 2.32 usec per loop