python3列表list追加元素之`L+=[x]`與L.extend([x])與`L.append(x)`誰更快?

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章