关于性能:在Python中创建一个空列表

Creating an empty list in Python

在Python中创建新的空列表的最佳方法是什么?

1
l = []

1
l = list()

我这样问是因为两个原因:

  • 技术上的原因,至于哪个更快。(创建类会导致开销?)< BR>
  • 代码可读性-哪个是标准约定。

  • 下面是如何测试哪段代码更快:

    1
    2
    3
    4
    5
    % python -mtimeit "l=[]"
    10000000 loops, best of 3: 0.0711 usec per loop

    % python -mtimeit "l=list()"
    1000000 loops, best of 3: 0.297 usec per loop

    然而,在实践中,这个初始化很可能是程序中非常小的一部分,因此担心这个问题可能是错误的。

    可读性是非常主观的。我更喜欢[],但是一些非常有知识的人,比如Alex Martelli,更喜欢list(),因为它是可发音的。


    list()天生比[]慢,因为

  • 有符号查找(如果不只是将列表重新定义为其他内容,Python就无法提前知道!),

  • 有函数调用,

  • 然后,它必须检查是否传递了可iterable参数(以便它可以用它的元素创建列表)ps。在我们的例子中没有,但是有"if"检查

  • 但在大多数情况下,速度差并不能产生实际的差异。


    我用的是[]

  • 它更快,因为列表符号是短路的。
  • 创建包含项的列表应该与创建不包含项的列表大致相同,为什么会有区别?

  • 我不太清楚,但根据我的经验,JPCGT实际上是对的。下面的示例:如果我使用下面的代码

    1
    2
    t = [] # implicit instantiation
    t = t.append(1)

    在解释器中,调用t只会给我"t",不带任何列表,如果我附加了其他内容,例如

    1
    t = t.append(2)

    我得到错误"'nonetype'对象没有属性'append'"。但是,如果我创建列表

    1
    t = list() # explicit instantiation

    然后就可以了。