有大量的二维数组转换为一维的任务,如下的写法非常的low,性能堪忧。
data = []
for a in alist:
data = data+a
网上搜寻一些方案,但文中未给出性能评测,所以想着做一下测试笔记。省流结论
itertools 最快from itertools import chain mulArrays = [[1,2,3],[4,5,6],[7,8,9]] print(list(chain.from_iterable(mulArrays))) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
测试数据如下
%time
import numpy as np
def test_list(n):
return [[i,0] for i in np.arange(n)]
alist = [ test_list(200) for i in np.arange(4000)]
验证方法1 for
%%time
data =[]
for a in alist:
data = data+a
# CPU times: user 18.1 s, sys: 0 ns, total: 18.1 s
# Wall time: 18.1 s
验证方法2 列表推导式
%%time b = [ i for a in alist for i in a]
CPU times: user 28.2 ms, sys: 4.06 ms, total: 32.2 ms Wall time: 31.1 ms
验证方法3
%%time import operator from functools import reduce mulArrays = alist bc = reduce(operator.add, mulArrays) len(bc)
CPU times: user 22.5 s, sys: 599 ms, total: 23.1 s Wall time: 22.1 s
验证方法4
%%time from itertools import chain mulArrays =alist dc = (list(chain.from_iterable(mulArrays)))
CPU times: user 16.6 ms, sys: 10 µs, total: 16.7 ms Wall time: 16.4 ms
验证方法5
%%time mulArrays = alist mc = sum(mulArrays,[])
CPU times: user 22.3 s, sys: 476 ms, total: 22.8 s Wall time: 21.8 s
结论:
| 方法 | 耗费时间 |
| sum | 22.8 s |
| itertool,chain | 16.7ms |
| operator.add | 23.1s |
| for | 18.1s |
| 列表推导式 | 32.2ms |
参考文章
Python将多维数组转换为一维_Sunshine_502的博客-CSDN博客_python多维数组转化为一维数组



