我正在寻找 C++ vector::reserve() 的 Python 等效项。我不知道列表会提前有多大,但我知道它会相当大,并且我希望尽可能避免调整大小,因为列表是在深层内部循环中增长的。
到目前为止,我提出的唯一解决方案与 vector::reserve() 习惯用法相比非常麻烦。该解决方案是使用 [None]*K 预先创建列表,在单独的计数器中跟踪列表的大小,根据需要将项目附加或设置到列表中,然后在完全构建后复制列表的一部分。还有其他选择吗?
为了解决这个问题,我做了一些性能测试:
def foo(n):
x = []
for y in xrange(n): x.append(y)
def bar(n):
x = [None] * n
for y in xrange(n): x[y] = y
def baz(n):
# This is obviously silly; we could just do range(n)
# but this way makes for a fairer test
x = [y for y in xrange(n)]
>>> timeit.timeit(lambda:foo(1000000), number=10)
1.761765391970215
>>> timeit.timeit(lambda:bar(1000000), number=10)
0.79829286962450396
>>> timeit.timeit(lambda:baz(1000000), number=10)
0.9904259479906159
>>> timeit.timeit(lambda:foo(10000), number=1000)
1.3354106457664443
>>> timeit.timeit(lambda:bar(10000), number=1000)
0.70596751821813086
>>> timeit.timeit(lambda:baz(10000), number=1000)
0.58049759117432131
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)