这样的代码经常发生:
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
结论 。这几乎不重要。
过早的优化是万恶之源。