Python3中不同方式建立已知长度数组的效率
今天在做一个前缀和题目的时候,因为要预分配一个前缀和数组,而数组的长度是已知的,所以想到了对比一下几种数组生成方式的效率。
这里用生成10000个int型数据的数组来做对比。
1. 列表生成式
1 | [i for i in range(10000)] |
可以看到平均速率是258µs。
2. list的append方法
1 | def test_listappend(n): |
可以看到平均速率是701µs,相对列表生成式来说慢了很多。
3. list的预分配方法
1 | def test_preadd(n): |
预分配空间后,再将值写入,效率大概在445µs左右,比append方法快,但是依然比列表生成式慢。
4. deque的append方法
1 | from collections import deque |
速率大概是680µs,只比list的append方法快了一点点。
5. deque的预分配方法
1 | from collections import deque |
777µs,比deque的append的效率还要慢一些。
可以看出,在数组长度已知的情况下,列表生成式的效率是很高的,如果不使用列表生成式,预分配数组空间再遍历写入值,效率也是比append方法要来的快。