在Python中创建空列表
在Python中创建新空列表的最佳方法是什么在Python中创建空列表,python,performance,list,coding-style,timeit,Python,Performance,List,Coding Style,Timeit,在Python中创建新空列表的最佳方法是什么 l = [] 或 我这样问是因为两个原因: 技术原因,关于哪个更快。(创建类会导致开销? 代码可读性-哪一个是标准约定 以下是如何测试哪段代码更快: % 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
l = []
或
我这样问是因为两个原因:
以下是如何测试哪段代码更快:
% 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
然而,在实践中,这种初始化很可能是程序中非常小的一部分,因此担心这一点可能是错误的
可读性是非常主观的。我更喜欢[]
,但一些非常有学问的人,比如亚历克斯·马泰利,更喜欢list()
,因为。list()
天生比[]
慢,因为
[]
我真的不知道这一点,但在我看来,根据经验,jpcgt实际上是正确的。下面的示例:如果我使用以下代码
t = [] # implicit instantiation
t = t.append(1)
在解释器中,调用t只会给我“t”,没有任何列表,如果我附加了其他内容,例如
t = t.append(2)
我得到错误“'NoneType'对象没有属性'append'”。但是,如果我通过
t = list() # explicit instantiation
然后它就可以正常工作了。只需突出显示@Darkonaut,因为我认为它应该更清晰可见
new\u list=[]
或new\u list=list()
都很好(忽略性能),但是append()
返回None
,因此您无法执行new\u list=new\u list。append(某物)
+1:理解list()
比[]
慢的原因感觉很好!在list()
的情况下,它只需检查是否有任何参数。。。“检查是否可编辑”和“创建包含元素的列表”不会发生;它们仅在存在arg时适用。甚至有可能[]
的C代码调用与list()
相同的C代码。无论如何,(c)所涉及的时间与(a)+(b)相比是微不足道的。@johnmachin-很抱歉搞混了,我在(c)中的意思是,它需要检查是否有争论,是的。剩下的是关于如果有争论会发生什么,在我们的例子中没有,谢谢你的分析。我一直想知道它是如何实现的。为什么list(“”)
给出的是[]
而不是['']
?这是因为这个函数从iterable类型生成列表,您不能插入多个参数。(试着键入list('abcd')
,你就能“更快地”理解一切)?为什么不运行timeit?这是因为t.append(1)
在适当的位置修改t
,它只返回None
,而您正在将此None
分配给t
。因此t
现在指的是None
,而不是列表。您的错误是编写了t=t.append(1)
,而不是只编写t.append(1)
。你会注意到list()
有同样的行为,所以这里没有区别。
t = list() # explicit instantiation