小编典典

在 Python 中创建具有初始容量的列表

all

这样的代码经常发生:

l = []
while foo:
    # baz
    l.append(bar)
    # qux

如果您要将数千个元素附加到列表中,这真的很慢,因为必须不断调整列表的大小以适应新元素。

在 Java 中,您可以创建一个具有初始容量的 ArrayList。如果您知道您的列表有多大,这将更有效率。

我知道这样的代码通常可以重构为列表理解。但是,如果 for / while 循环非常复杂,这是不可行的。我们的 Python 程序员有没有等价物?


阅读 113

收藏
2022-06-18

共1个答案

小编典典

警告:这个答案是有争议的。看评论。

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

结论 。这几乎不重要。

过早的优化是万恶之源。

2022-06-18