5种二维列表复制方案如下:
1.新建列表,逐个append复制原列表的各个元素。
2.使用深复制deepcopy。
3.使用二维列表推导式。
4.使用copy+一维列表推导式。
5.转换为numpy数组再转成列表。
对比各方案运行时间,代码如下:
import time
import copy
import random
import numpy as np
temp = [[random.random() for j in range(100)] for i in range(100)]
t0 = time.clock()
# 方案1:新建列表逐个元素复制
a = []
for i in range(len(temp)):
a.append([])
for j in range(len(temp[0])):
a[i].append(temp[i][j])
t1 = time.clock()
# 方案2:使用深复制deepcopy
b = copy.deepcopy(temp)
t2 = time.clock()
# 方案3:使用列表推导式
c = [[temp[i][j] for j in range(len(temp[0]))] for i in range(len(temp))]
t3 = time.clock()
# 方案4:内层copy,外层列表推导式
d = [copy.copy(temp[i]) for i in range(len(temp))]
t4 = time.clock()
# 方案5:使用numpy
e = np.array(temp).tolist()
t5 = time.clock()
print('1.逐个元素复制时长:%f s'%(t1-t0))
print('2.deepcopy时长:%f s'%(t2-t1))
print('3.列表推导式时长:%f s'%(t3-t2))
print('4.内层copy外层推导时长:%f s'%(t4-t3))
print('5.使用numpy:%f s'%(t5-t4))
对比结果如下:
1.逐个元素复制时长:0.002243 s
2.deepcopy时长:0.007176 s
3.列表推导式时长:0.000769 s
4.内层copy外层推导时长:0.000118 s
5.使用numpy:0.000832 s
可以看出,deepcopy是真的慢,逐个复制也比较慢,使用列表推导式和numpy转换时间差不多,最快的是使用copy+一维列表推导式。