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

Edd*_*ddy 3 python arrays integer

假设我想在python中创建一个1,000,000两个数组(不是列表),如下所示:

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

这样做的快速而简单的方法是什么?

Joh*_*hin 12

目前接受的答案不是最快的方式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
Run Code Online (Sandbox Code Playgroud)

这是一个约9比1的比例......


g.d*_*d.c 7

这就是你要追求的吗?

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

# faster.
twosArr = array.array('i', [2]) * 1000000
Run Code Online (Sandbox Code Playgroud)

你可以得到一个列表:

twosList = [2] * 1000000
Run Code Online (Sandbox Code Playgroud)

- 已编辑 -

我更新了这个以反映另一个答案的信息.通过略微调整语法,您可以将速度提高~9:1.完全归功于@ john-machin.我不知道你可以像对列表一样对数组对象进行复用.


Joh*_*ooy 5

混合方法对我来说效果最快

$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)