像这样的代码经常发生:
l = []
while foo:
#baz
l.append(bar)
#qux
Run Code Online (Sandbox Code Playgroud)
如果您要将数千个元素追加到列表中,这非常慢,因为必须不断调整列表大小以适应新元素.
在Java中,您可以创建具有初始容量的ArrayList.如果您对列表的大小有所了解,那么效率会更高.
我知道像这样的代码通常可以重新考虑到列表理解中.但是,如果for/while循环非常复杂,那么这是不可行的.我们的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 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)
谢谢