J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.

en premier

Quel est le plus rapide, la notation dans la liste, pour et pendant? Je me demandais, alors j'ai écrit divers codes et les ai mesurés.

Environnement d'exécution

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

Objectif de mesure

pour boucle simple (1 million de fois) pour double boucle (1000 fois x 1000 fois) Notation d'inclusion de liste (1 million de fois) Notation d'inclusion de liste (1000 fois x 1000 fois) en boucle unique (1 million de fois) en double boucle (1000 fois x 1000 fois)

Conditions (voir le code à la fin pour plus de détails)

Lors de la création d'une liste En cas de + pour (avec ou sans plage)

résultat

Si vous souhaitez simplement créer une liste, la notation d'inclusion de liste était la plus rapide. Lorsque l'instruction if était incluse, la situation était un peu pire dans l'ensemble, et la notation d'inclusion for et list n'a pas beaucoup changé. alors que c'était une double boucle et évidemment ralenti. Je ne sais pas pourquoi. Lorsqu'il s'agit de calculer la valeur totale, la notation d'inclusion de liste est plus lente que pour. Cela semble signifier qu'il faut du temps pour additionner un million de pièces. Le résultat du calcul de la valeur totale + if est le même, qu'il soit inclus dans la liste ou pour. determine.png

Conclusion

Pour le moment, vous pouvez écrire la notation d'inclusion de liste, mais si le processus n'utilise pas la liste créée (comme la simple prise de somme), le coût de traitement de la liste avec d'autres fonctions (sum () etc.) augmentera. Et peut être lent. Alors qu'il faut être prudent si de multiples boucles.

Code expérimental

seq1 = range(10**6)
seq2 = range(10**3)
num1 = 10**6
num2 = 10**3

v = 10**10
def for1():
  ls = []
  for i in seq1:
    ls.append(v)
  #print len(ls)

def for2():
  ls = []

  for i in seq2:
    for j in seq2:
      ls.append(v)
  #print len(ls)

def for_range1():
  ls = []
  for i in range(10**6):
    ls.append(v)
  #print len(ls)

def for_range2():
  ls = []
  for i in range(10**3):
    for j in range(10**3):
      ls.append(v)
  #print len(ls)
      
def for_listnai1():
  [v for i in seq1]

def for_listnai2():
  [v for i in seq2 for j in seq2]

def for_listnai_range1():
  [v for i in range(10**6)]

def for_listnai_range2():
  [v for i in range(10**3) for j in range(10**3)]

def forsum1():
  s = 0
  for i in seq1:
    s += v

def forsum2():
  s = 0
  for i in seq2:
    for j in seq2:
      s += v

def for_listnaisum1():
  sum([v for i in seq1])

def for_listnaisum2():
  sum([v for i in seq2 for j in seq2])

def while1():
  i = 0
  ls = []
  while i < num1:
    ls.append(v)
    i+=1
  
def while2():
  i = 0
  ls = []
  while i < num2:
    j = 0
    while j < num2:
      ls.append(v)
      j+=1
    i+=1

def whilesum1():
  i = 0
  s = 0
  while i < num1:
    s += v
    i+=1
  
def whilesum2():
  i = 0
  s = 0
  
  while i < num2:
    j = 0
    while j < num2:
      s += v
      j+=1
    i+=1
    
def forif1():
  ls = []
  for i in seq1:
    if v % 2:
      ls.append(v)

def forif2():
  ls = []
  for i in seq2:
    for j in seq2:
      if v % 2:
        ls.append(v)

def forlistnaiif1():
  [v for i in seq1 if v % 2]

def forlistnaiif2():
  [v for i in seq2 for j in seq2 if v % 2]

def whileif1():
  ls = []
  i=0
  while i <num1:
    ls.append(v)
    i+=1

def whileif2():
  ls = []
  i=0
  while i <num2:
    j=0
    while j<num2 :
      if v % 2:
        ls.append(v)
      j+=1
    i+=1
    
def forifsum1():
  s = 0
  for i in seq1:
    if v % 2:
      s+=v

def forifsum2():
  s = 0
  for i in seq2:
    for j in seq2:
      if v % 2:
        s+=v

def forlistnaiifsum1():
  sum([v for i in seq1 if v % 2])

def forlistnaiifsum2():
  sum([v for i in seq2 for j in seq2 if v % 2])

def whileifsum1():
  s = 0
  i=0
  while i <num1:
    s+=v
    i+=1

def whileifsum2():
  s=0
  i=0
  while i <num2:
    j=0
    while j<num2 :
      if v % 2:
        s+=v
      j+=1
    i+=1

Code de mesure du temps


def exe(func,num=0):
    import time
    print "%s start:" % func
    s = 0
    for i in range(0,num): 
      start = time.time()
      exec func
      end = time.time()
      s += end - start
    print "%s finished: %d times." % (func,num)
    print s

if __name__=='__main__':
  exe("for1()",1)
  exe("for2()",1)
  exe("for_range1()",1)
  exe("for_range2()",1)
  exe("for_listnai1()",1)
  exe("for_listnai2()",1)
  exe("for_listnai_range1()",1)
  exe("for_listnai_range2()",1)
  exe("while1()",1)
  exe("while2()",1)
  
  exe("forsum1()",1)
  exe("forsum2()",1)
  exe("for_listnaisum1()",1)
  exe("for_listnaisum2()",1)
  exe("whilesum1()",1)
  exe("whilesum2()",1)

  exe("forif1()",1)
  exe("forif2()",1)
  exe("forlistnaiif1()",1)
  exe("forlistnaiif2()",1)
  exe("whileif1()",1)
  exe("whileif2()",1)

  exe("forifsum1()",1)
  exe("forifsum2()",1)
  exe("forlistnaiifsum1()",1)
  exe("forlistnaiifsum2()",1)
  exe("whileifsum1()",1)
  exe("whileifsum2()",1)

Recommended Posts

J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Vitesse de notation d'inclusion de liste en Python
Comparez la vitesse d'ajout et de carte Python
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Vitesse de lecture Python netCDF4 et imbrication d'instructions for
Visualisez la gamme d'insertions internes et externes avec python
J'ai vérifié les versions de Blender et Python
J'ai mesuré les performances d'un million de documents avec mongoDB
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 essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'étais accro au débogueur Python pdb pendant 2 minutes
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai évalué la stratégie de négociation du système boursier avec Python.
Je veux connaître la nature de Python et pip
J'ai implémenté N-Queen dans différentes langues et mesuré la vitesse
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
J'ai aimé le tweet avec python. ..
J'ai joué avec PyQt5 et Python3
Coexistence de Python2 et 3 avec CircleCI (1.0)
À propos de la liste de base des bases de Python
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Je veux sortir le début du mois prochain avec Python
J'ai essayé de créer une liste de nombres premiers avec python
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de la régression logistique
L'histoire de la création d'un pilote standard pour db avec python.
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de l'arbre de décision
python Remarque: map -faire la même chose pour chaque élément de la liste
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
Le dernier NGINX est un serveur d'applications! ?? J'ai mesuré le benchmark de NGINX Unit avec PHP, Python, Go! !!
python Remarque: enumerate () -Obtenir l'index et l'élément de la liste en même temps et tourner pour l'instruction
Vérifier l'existence du fichier avec python
Notation inclusive de Python (à propos de l'expression de liste et de générateur) [supplémentaire]
Je ne connaissais pas les bases de Python
J'ai installé et utilisé Numba avec Python3.5
La troisième nuit de la boucle avec pour
Pandas du débutant, par le débutant, pour le débutant [Python]
Le modèle de projet Python auquel je pense.
La deuxième nuit de la boucle avec pour
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
J'ai lu le dictionnaire de synonymes Sudachi avec Pandas et essayé de rechercher des synonymes
Python> sys.path> Liste de chaînes indiquant le chemin pour rechercher des modules
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
J'ai mesuré 6 méthodes pour obtenir l'indice de la valeur maximale (valeur minimale) de la liste
[Python of Hikari-] Chapitre 05-09 Syntaxe de contrôle (utilisation correcte des instructions for et while)
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai vectorisé l'accord de la chanson avec word2vec et je l'ai visualisé avec t-SNE
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
J'ai 0 ans d'expérience en programmation et je défie le traitement des données avec python
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
Recevez une liste des résultats du traitement parallèle en Python avec starmap