[PYTHON] C'est plus rapide d'ajouter que de rejoindre et d'étendre la liste, non?

Mesure de vitesse facile

Mesurons la vitesse lors de l'ajout de sub_list = list (range (10000)) à une liste vide.

1. Vitesse ʻextend`

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)

2. Vitesse d'addition

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? ** **

Mesure détaillée de la vitesse

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.

Si la liste est courte

image.png

** Avantage supplémentaire **

Si la liste est longue

image.png

** Dominance ʻextend` **

Je me demande si c'est impliqué dans l'implémentation de Python en premier lieu?

code

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

C'est plus rapide d'ajouter que de rejoindre et d'étendre la liste, non?
Python> liste> append () et extend ()> append: Ajouter une liste | extend: Ajouter un élément de liste | Ajouter une liste avec + =
Ajouter des disques pour étendre la zone SWAP et / home du LVM
Supprimer ou récupérer des tableaux de fasta en fonction du fichier de liste d'ID
Mémorandum (Ajouter le nom uniquement aux personnes portant le même nom de famille dans la liste)
Méthode Ford-Falkerson et ses applications - Supplément au chapitre 8 de la référence rapide de l'algorithme -
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Il est vraiment utile d'ajouter les méthodes save () et load () à Target dans Luigi