在Python中创建一个空列表

use*_*312 229 python performance coding-style list timeit

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

l = [] 
Run Code Online (Sandbox Code Playgroud)

要么

l = list()
Run Code Online (Sandbox Code Playgroud)

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

  1. 技术原因,哪个更快.(创建一个类导致开销?)
  2. 代码可读性 - 哪一个是标准惯例.

unu*_*tbu 318

以下是如何测试哪一段代码更快的方法:

% 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
Run Code Online (Sandbox Code Playgroud)

但是,在实践中,这种初始化很可能只是程序的一小部分,所以担心这可能是错误的.

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

  • +1:担心这是完全错误的. (44认同)
  • 哇,谢谢你的分析.我一直想知道它是如何完成的. (12认同)

Nas*_*nov 128

list()本质上比慢[],因为

  1. 有符号查找(如果你不只是将列表重新定义为其他内容,那么python就无法事先知道!),

  2. 有函数调用,

  3. 然后它必须检查是否传递了可迭代的参数(因此它可以创建包含元素的列表)ps.在我们的情况下没有,但有"如果"检查

在大多数情况下,速度差异不会产生任何实际差异.

  • +1:理解为什么`list()`慢于`[]`感觉很好! (37认同)
  • 在`list()`的情况下,它只需检查是否有任何arg ..."检查是否可迭代"和"创建包含元素的列表"只是不会发生; 它们只适用于有arg的情况.甚至有可能``[``的C代码调用与`list()`相同的C代码.无论如何,与(a)+(b)相比,(c)所涉及的时间会很短. (2认同)

Geo*_*lly 15

我用[].

  1. 它更快,因为列表符号是短路的.
  2. 创建包含项目的列表应该与创建列表相同,为什么应该有区别?