253

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

l = [] 

或者

l = list()

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

  1. 技术原因,至于哪个更快。(创建一个类会导致开销?)
  2. 代码可读性——哪一个是标准约定。
4

5 回答 5

347

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

% 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()因为它是可发音的

于 2010-06-04T07:29:11.053 回答
141

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

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

  2. 有函数调用,

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

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

于 2010-06-04T07:59:11.073 回答
18

我用[].

  1. 它更快,因为列表符号是短路。
  2. 创建一个包含项目的列表应该与创建一个没有项目的列表大致相同,为什么会有区别?
于 2010-06-04T08:06:08.737 回答
3

只是为了突出@Darkonaut 的答案,因为我认为它应该更明显。

new_list = []或者new_list = list()都很好(忽略性能),但append()返回None,结果你不能做new_list = new_list.append(something).

于 2020-06-13T19:57:25.183 回答
2

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

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

在解释器中,然后调用 t 给我的只是“t”而没有任何列表,如果我附加其他内容,例如

t = t.append(2)

我收到错误“'NoneType' 对象没有属性 'append'”。但是,如果我通过以下方式创建列表

t = list() # explicit instantiation

然后它工作正常。

于 2017-03-14T18:43:34.063 回答