在Python中创建一个新的空列表的最佳方法是什么?
l = []
or
l = list()
我问这个问题有两个原因:
技术原因,关于哪个更快。(创建类会导致开销?) 代码可读性——哪一个是标准约定。
在Python中创建一个新的空列表的最佳方法是什么?
l = []
or
l = list()
我问这个问题有两个原因:
技术原因,关于哪个更快。(创建类会导致开销?) 代码可读性——哪一个是标准约定。
当前回答
只是为了突出@Darkonaut的答案,因为我认为它应该更明显。
new_list =[]或new_list = list()都很好(忽略性能),但append()返回None,因此不能执行new_list = new_list.append(something)。
其他回答
下面是测试哪段代码更快的方法:
% 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(),因为它便于发音。
我真的不知道,但在我看来,根据经验,jpcgt实际上是正确的。以下示例:如果我使用以下代码
t = [] # implicit instantiation
t = t.append(1)
在解释器中,那么调用t只给我“t”,没有任何列表,如果我附加其他东西,例如。
t = t.append(2)
我得到错误“‘NoneType’对象没有属性‘append’”。但是,如果我通过
t = list() # explicit instantiation
这样就可以正常工作了。
只是为了突出@Darkonaut的答案,因为我认为它应该更明显。
new_list =[]或new_list = list()都很好(忽略性能),但append()返回None,因此不能执行new_list = new_list.append(something)。
List()本质上比[]慢,因为
有符号查找(python没有办法提前知道如果你没有重新定义list为其他东西!), 有函数调用, 然后它必须检查是否传递了可迭代参数(这样它就可以用它的元素创建列表)。在我们的例子中没有,但有“if”检查
在大多数情况下,速度的差异不会产生任何实际的差异。
我使用[]。
它更快,因为列表符号是短路。 创建一个包含项目的列表应该与创建一个没有项目的列表大致相同,为什么会有区别呢?