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

这样的代码经常发生:

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/

相关文章:

linux - 在 linux 中显示磁盘事件的类似 htop 的工具

python - Python中的事件系统

linux - 在 SSH session 中查找客户端的 IP 地址

linux - 如何在 linux 中显示来自 bash 脚本的 GUI 消息框?

python - 如何为类对象创建自定义字符串表示?

python - 遍历列表中的每两个元素

linux - 什么是不间断进程?

linux - 在 Linux 上的 bash 中获取昨天的日期,DST 安全

linux - 如何强制 CIFS 连接卸载

python - 在 NumPy 中将索引数组转换为 one-hot 编码数组