在Python中创建一个空列表

时间:2010-06-04 07:26:02

标签: python performance list coding-style timeit

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

l = [] 

l = list()

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

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

5 个答案:

答案 0 :(得分:283)

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

% 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()因为it is pronounceable

答案 1 :(得分:118)

list()本身比[]慢,因为

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

  2. 有函数调用,

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

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

答案 2 :(得分:14)

我使用[]

  1. 它更快,因为列表符号是短路的。
  2. 使用项目创建列表应该与创建列表相同,为什么会有差异?

答案 3 :(得分:2)

我真的不知道它,但在我看来,根据经验,jpcgt实际上是正确的。以下示例:如果我使用以下代码

t = [] # implicit instantiation
t = t.append(1)
解释器中的

,然后调用t只给我“t”而没有任何列表,如果我追加别的东西,例如。

t = t.append(2)

我收到错误“'NoneType'对象没有属性'append'”。但是,如果我按

创建列表
t = list() # explicit instantiation

然后它运作正常。

答案 4 :(得分:1)

只需突出显示@Darkonaut answer,因为我认为它应该更可见。

new_list = []new_list = list()都很好(忽略性能),但是append()返回None,因此您无法执行new_list = new_list.append(something)