python3列表list追加元素之L+=[x]
與L.extend([x])
與L.append(x)
誰更快?
結論:L.append()方法在追加元素的多次測試中表現速度均更快。
思考:L.append(x)後面的參數直接是給元素x,少了生成新列表[x]的過程
運行結果:
代碼:
import datetime
import matplotlib.pyplot as mp
def get_time(fn):
def f(*args):
t0 = datetime.datetime.now()
print('\nstart', t0)
fn(*args)
t1 = datetime.datetime.now()
print(' end', t1, '\n運行耗時', t1-t0)
Ltime.append((t1-t0).seconds)
return f
@get_time
def f1(n):
L = []
for x in range(n):
L += [n]
@get_time
def f2(n):
L = []
for x in range(n):
L.extend([n])
@get_time
def f3(n):
L = []
for x in range(n):
L.append(n)
X, y1, y2, y3 = [], [], [], []
x = 10000000
for x in range(x, 20*x, 4*x):
Ltime = []
f1(x)
f2(x)
f3(x)
X.append(x)
y1.append(Ltime[0])
y2.append(Ltime[1])
y3.append(Ltime[2])
mp.plot(X, y1, linestyle='-', label="+=", color='red')
mp.plot(X, y2, linestyle='-', label="L.extend", color='blue')
mp.plot(X, y3, linestyle='-', label="L.append", color='orange')
for y, colors in zip([y1, y2, y3], ['red', 'blue', 'orange']):
mp.scatter(X, y,
marker='o', # 點型 ~ matplotlib.markers
s=60, # 大小
edgecolor=colors, # 邊緣色
facecolor='white', # 填充色
zorder=3 # 繪製圖層編號 (編號越大,圖層越靠上)
)
mp.legend()
mp.show()