相关疑难解决方法(0)

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

像这样的代码经常发生:

l = []
while foo:
    #baz
    l.append(bar)
    #qux
Run Code Online (Sandbox Code Playgroud)

如果您要将数千个元素追加到列表中,这非常慢,因为必须不断调整列表大小以适应新元素.

在Java中,您可以创建具有初始容量的ArrayList.如果您对列表的大小有所了解,那么效率会更高.

我知道像这样的代码通常可以重新考虑到列表理解中.但是,如果for/while循环非常复杂,那么这是不可行的.我们的Python程序员有没有相同的东西?

python dictionary initialization list

182
推荐指数
7
解决办法
16万
查看次数

如何在Python中设置字典的初始大小?

我将大约400万个不同的密钥放入Python字典中.创建此字典大约需要15分钟,并且在我的计算机上占用大约4GB的内存.完全创建字典后,查询字典很快.

我怀疑字典创建是如此耗费资源,因为字典经常被重新定义(因为它大大增长).是否可以在Python中创建一个具有一些初始大小或桶号的字典?

我的字典从数字指向对象.

class MyObject(object):
  def __init__(self):
    # some fields...

d = {}
d[i] = MyObject()  # 4M times on different key...
Run Code Online (Sandbox Code Playgroud)

python performance dictionary

19
推荐指数
3
解决办法
2万
查看次数

为字典预先分配内存?

在 python 3.4 中,我试图在一个大循环中填充一个字典,为其分配 30000 * 1000 个双数。我想预先为字典分配内存,这样我就可以减少每次迭代中分配内存带来的性能开销。

另外,如何检查Python中允许分配给字典(和列表)的内存大小限制?例如,如果只允许50MB,我会尽量避免溢出。这可能取决于操作系统和其他系统,但我想知道如何最大限度地提高性能。

我可以用

ll = [None] * 1000
Run Code Online (Sandbox Code Playgroud)

为列表分配内存。

字典有类似的方法吗?

d = {None} * 1000 ? 
or 
d = {None: None} * 1000 ? 
Run Code Online (Sandbox Code Playgroud)

谢谢

python dictionary python-3.x

4
推荐指数
1
解决办法
7529
查看次数