在Python中初始化整数数组的最快方法是什么?

6 投票
6 回答
14217 浏览
提问于 2025-04-16 01:03

假设我想在Python中创建一个包含1,000,000个数字2的数组(不是列表),像这样:

array = [2, 2, 2, ...... , 2]

有没有什么快速又简单的方法来实现这个呢?

6 个回答

5

我发现混合方法是最快的。

$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop

$ python -m timeit -s"import array" "arr = array.array('i', [2]) * 1000000"
10 loops, best of 3: 20.3 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*10) * 100000"
100 loops, best of 3: 6.69 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*1000) * 1000"
100 loops, best of 3: 5.47 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*10000) * 100"
100 loops, best of 3: 6.13 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100000) * 10"
10 loops, best of 3: 14.9 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*1000000)"
10 loops, best of 3: 77.7 msec per loop
18

目前被接受的答案并不是使用 array.array 的最快方法;至少它不是最慢的——来看看这些对比:

[source: johncatfish (quoting chauncey), Bartek]
python -m timeit -s"import array" "arr = array.array('i', (2 for i in range(0,1000000)))"
10 loops, best of 3: 543 msec per loop

[source: g.d.d.c]
python -m timeit -s"import array" "arr = array.array('i', [2] * 1000000)"
10 loops, best of 3: 141 msec per loop

python -m timeit -s"import array" "arr = array.array('i', [2]) * 1000000"
100 loops, best of 3: 15.7 msec per loop

这个比例大约是9比1……

9

这就是你想要的吗?

# slower.
twosArr = array.array('i', [2] * 1000000)

# faster.
twosArr = array.array('i', [2]) * 1000000

你可以用这个方法得到一个列表:

twosList = [2] * 1000000

-- 已编辑 --

我更新了这个内容,以反映另一个回答中的信息。看起来通过稍微调整语法,你可以把速度提高大约9倍。这个功劳归于@john-machin。我之前不知道你可以像对待列表那样对数组对象进行乘法操作。

撰写回答