J'ai vérifié la vitesse de référence lors de l'utilisation de la liste python, du dictionnaire et du type de jeu.

introduction

Le site suivant décrit ce qui suit. La validation des éléments (O (1)) à l'aide d'ensembles et de dictionnaires est plus rapide que la récupération de tableaux (O (n)). Lorsque vous recherchez a dans b, b doit être des ensembles ou des dictionnaires, pas des listes ou des taples. http://www.peignot.net/python-speed

Est-ce vrai? En quoi est-ce différent de ce que je pensais? J'étais curieux, alors je l'ai essayé.

Environnement d'exécution

python2.7 windows7 Intel Core i5 CPU 2.4GHz Mémoire 4,0 Go

Condition d'exécution

Dans une liste, un dictionnaire et un type d'ensemble, j'ai créé une séquence d'entiers (1 million d'éléments) pour chaque multiple de 1, chaque multiple de 2 et chaque multiple de 3, et référencée de 1 à 10000. La raison de la création d'une séquence d'entiers pour chaque multiple de 1, chaque multiple de 2 et chaque multiple de 3 est d'étudier l'effet du taux de succès sur la vitesse de traitement. Le nombre total de tests est de 10 fois. Voir le code ci-dessous pour plus de détails.

résultat

Alors que la référence de la liste était assez lente pour mourir, le dictionnaire et le type d'ensemble étaient très rapides. Dans la liste, il a été constaté que la vitesse de traitement était clairement plus lente lorsque le taux de réussite était faible que lorsque le taux de réussite était élevé. L'unité est la seconde, qui correspond au temps total d'exécution 10 fois. En revanche, la vitesse de traitement du type dictionnaire et du type d'ensemble n'a pas tellement diminué. (3/5 8:08 Correction du chiffre car la plage était incorrecte) speed_in.png

Conclusion

Dans une liste avec un grand nombre d'éléments Élément dans la liste L'écriture doit être évitée autant que possible. Vraiment assez lent pour mourir.

Code expérimental

def lists(q,h):
  ls = [i for i in range(0,q*h,h)]
  for i in range(q): i in ls

def dicts(q,h):
  dc = {i:i for i in range(0,q*h,h)}
  for i in range(q): i in dc  

def setts(q,h):
  st = set(i for i in range(0,q*h,h))
  for i in range(q): i in st

def exe(func,num=100):
  from timeit import timeit
  setup = 'from __main__ import ' + func[:5]
  print "%s: %s" % (func, timeit(func, setup, number=num))

if __name__=='__main__':
  q = 10**4
  funcs = ['lists','dicts','setts']
  hits = [1,2,3]
  for h in hits:
    for f in funcs:
      func = '%s(%s, %s)'  % (f,q,h)
      print func
      exe(func,10)

Recommended Posts

J'ai vérifié la vitesse de référence lors de l'utilisation de la liste python, du dictionnaire et du type de jeu.
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
Je veux rendre le type de dictionnaire dans la liste unique
J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
J'ai comparé "type de dictionnaire python" et "fonction excel"
[Python] Précautions lors de l'acquisition de données en grattant et en les mettant dans la liste
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
Pour accélérer python, résumez la quantité de calcul du type de collection (liste / tuple / dictionnaire / ensemble) pour chaque objectif.
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
J'ai vérifié les versions de Blender et Python
J'ai étudié le temps de calcul de "X dans la liste" (recherche linéaire / recherche dichotomique) et "X dans l'ensemble"
J'ai vérifié le package Python pré-installé dans Google Cloud Dataflow
Obtenez le type MIME en Python et déterminez le format de fichier
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Maîtrisez le type avec Python? (Quand faire la vérification de type)
J'ai essayé de programmer le test du chi carré en Python et Java.
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
J'ai implémenté N-Queen dans différentes langues et mesuré la vitesse
J'ai regroupé le yen dollar en utilisant la méthode k-medoids en python et j'ai trouvé le taux de réponse correct.
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
Différence entre list () et [] en Python
Précautions lors de l'utilisation de Pit avec Python
J'ai eu un AttributeError en me moquant de la méthode ouverte en python
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
J'ai écrit la file d'attente en Python
Que faire lorsque le type de valeur est ambigu en Python?
Lors de l'utilisation d'expressions régulières en Python
J'ai écrit la pile en Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Notifier à l'aide du Centre de notifications lorsque l'environnement d'exécution est macOS en Python
Une note utile lors de l'utilisation de Python après une longue période
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Prenez la somme logique de List en Python (fonction zip)
Tweet à l'aide de l'API Twitter en Python
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Différence entre append et + = dans la liste Python
Associez l'ensemble de tables dans les modèles de python.py
Obtenir la liste de codes EDINET en Python
traitement (python) Diagramme les coordonnées de la liste Spécifiez le nombre de fois dans draw ()
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
Ce que j'ai fait quand je suis resté coincé dans le délai avec lambda python
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
Notez que je comprends l'algorithme des moindres carrés. Et je l'ai écrit en Python.
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé la détection d'objets en utilisant Python et OpenCV