Mesurons la vitesse lors de l'ajout de sub_list = list (range (10000))
à une liste vide.
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)
** L'ajout est plus rapide et la vitesse est stable. ʻExtend` est une fonction intégrée, mais c'est lent, n'est-ce pas? ** **
Pour ce problème,
--Longueur de la liste d'origine --Longueur de la liste à ajouter
Puisqu'il y a deux variables, mesurez la vitesse lorsque vous jouez avec elles. Ensuite, soustrayez les vitesses et voyez laquelle des «extensions» et des ajouts l'emporte.
** Avantage supplémentaire **
** Dominance ʻextend` **
Je me demande si c'est impliqué dans l'implémentation de Python en premier lieu?
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