c++ - Python 等效于 vector::reserve()

标签 c++ python

我正在寻找与 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

关于c++ - Python 等效于 vector::reserve(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730754/

相关文章:

python - 使用 Tensorflow C++ API 执行在 skflow 中训练的模型

c++ - cin 无法停止 while 循环

c++ - 使用c++在excel中抑制删除工作表警告

c++ - 用 Qt 制作问卷,使用 QScrollArea

python - 将每个元素视为元组时,在 PySpark 中加入 2 个 RDD

python - 回调函数在多处理 map_async 中如何工作?

C++ 为什么当它们 100% 看起来匹配时会出现错误 "no matching function"?

python - 为什么类别列被视为 pandas 中的字符串列?

python - 数字中的下划线是什么意思?

python - 从对象内部获取分配给该对象的变量?