Messen wir die Geschwindigkeit, wenn wir einer leeren Liste "sub_list = list (range (10000))" hinzufügen.
In:
%%timeit
li = []
li.extend(sub_list)
Out:
26.7 µs ± 2.44 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In:
%%timeit
li = []
li += sub_list
Out:
25.3 µs ± 281 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
** Die Zugabe ist schneller und die Geschwindigkeit ist stabil. verlängern
ist eine eingebaute Funktion, aber es ist langsam, nicht wahr? ** **.
Für dieses Problem
Da es zwei Variablen gibt, messen Sie die Geschwindigkeit, wenn Sie mit ihnen spielen. Subtrahieren Sie dann die Geschwindigkeiten und sehen Sie, welche der "verlängern" und die Addition gewinnt.
verlängern
ist schneller** Zusatzvorteil **
verlängern
ist schneller** Dominanz erweitern **
Ich frage mich, ob es überhaupt an der Implementierung von Python beteiligt ist.
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from time import time
def extend_time(old_i, new_i):
old = list(range(10 ** old_i))
new = list(range(10 ** new_i))
s = time()
old.extend(new)
e = time()
return e - s
def add_time(old_i, new_i):
old = list(range(10 ** old_i))
new = list(range(10 ** new_i))
s = time()
old += new
e = time()
return e - s
extend_time = np.vectorize(extend_time)
add_time = np.vectorize(add_time)
shape = (8, 8)
extend_graph = np.fromfunction(extend_time, shape, dtype=np.int)
add_graph = np.fromfunction(add_time, shape, dtype=np.int)
result = np.where(extend_graph - add_graph > 0, True, False)
sns.heatmap(result, cbar=False, xticklabels=[10 ** i for i in range(shape[0])], yticklabels=[10 ** i for i in range(shape[0])])
plt.ylabel("old list length")
plt.xlabel("new list length")
plt.show()
Recommended Posts