这样的代码经常发生:
l = []
while foo:
# baz
l.append(bar)
# qux
如果您要向列表添加数千个元素,这真的很慢,因为必须不断调整列表的大小以适应新元素。
在 Java 中,您可以创建具有初始容量的 ArrayList。如果您知道您的列表有多大,这将更有效率。
我知道这样的代码通常可以重构为列表理解。但是,如果 for/while 循环非常复杂,这是不可行的。有没有适合我们 Python 程序员的等价物?
最佳答案
def doAppend( size=10000 ):
result = []
for i in range(size):
message= "some unique object %d" % ( i, )
result.append(message)
return result
def doAllocate( size=10000 ):
result=size*[None]
for i in range(size):
message= "some unique object %d" % ( i, )
result[i]= message
return result
结果。 (评估每个函数 144 次并平均持续时间)
simple append 0.0102
pre-allocate 0.0098
结论。没关系。
过早的优化是万恶之源。
https://stackoverflow.com/questions/311775/