像这样的代码经常发生:
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
结论 。没关系。
过早的优化是万恶之源。