Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.

zunaechst

Was ist schneller, Notation in der Liste, für und während? Ich habe mich gefragt, also habe ich verschiedene Codes geschrieben und gemessen.

Ausführungsumgebung

python2.7 windows7 Intel Core i5 CPU 2.4GHz Speicher 4,0 GB

Messziel

für Einzelschleife (1 Million Mal) für Doppelschleife (1000 mal x 1000 mal) Notation der Listeneinbeziehung (1 Million Mal) Listeneinschlussnotation (1000 mal x 1000 mal) während einzelne Schleife (1 Million Mal) während Doppelschleife (1000 mal x 1000 mal)

Bedingungen (Einzelheiten siehe Code am Ende)

Beim Erstellen einer Liste Bei + für (mit oder ohne Reichweite)

Ergebnis

Wenn Sie nur eine Liste erstellen möchten, war die Listeneinschlussnotation die schnellste. Als die if-Anweisung aufgenommen wurde, wurde sie insgesamt etwas schlechter, und die Notation für und für die Aufnahme von Listen änderte sich nicht wesentlich. während war eine Doppelschleife und offensichtlich verlangsamt. Ich bin mir nicht sicher warum. Bei der Berechnung des Gesamtwerts ist die Listeneinschlussnotation langsamer als für. Dies scheint zu bedeuten, dass es Zeit braucht, um eine Million Stück zu summieren. Das Ergebnis der Gesamtwertberechnung + if ist das gleiche, unabhängig davon, ob es in der Liste enthalten ist oder für. determine.png

Fazit

Sie können die Listeneinschlussnotation vorerst schreiben, aber wenn der Prozess die erstellte Liste nicht verwendet (z. B. einfach Summe nehmen), erhöhen sich die Kosten für die Verarbeitung der Liste mit anderen Funktionen (Summe () usw.). Und kann langsam sein. Während sollte vorsichtig sein, wenn von mehreren Schleifen.

Experimenteller Code

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

Zeitmesscode


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

Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Geschwindigkeit der Listeneinschlussnotation in Python
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Python netCDF4 Lesegeschwindigkeit und Verschachtelung von for-Anweisungen
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich war 2 Minuten lang süchtig nach Python-Debugger-PDF
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe N-Queen in verschiedenen Sprachen implementiert und die Geschwindigkeit gemessen
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Ich mochte den Tweet mit Python. ..
Ich habe mit PyQt5 und Python3 gespielt
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Informationen zur Grundlagenliste der Python-Grundlagen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
[Python] Ich habe die Theorie und Implementierung des Entscheidungsbaums gründlich erklärt
Python Hinweis: Map - Machen Sie dasselbe für jedes Element der Liste
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Der neueste NGINX ist ein Anwendungsserver! ?? Ich habe den Benchmark von NGINX Unit mit PHP, Python, Go! !!
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
Überprüfen Sie die Existenz der Datei mit Python
Inklusive Notation von Python (über Liste und Generatorausdruck) [zusätzlich]
Ich kannte die Grundlagen von Python nicht
Ich habe Numba mit Python3.5 installiert und verwendet
Die dritte Nacht der Runde mit für
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Die Python-Projektvorlage, an die ich denke.
Die zweite Nacht der Runde mit für
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Ich habe das Sudachi-Synonymwörterbuch mit Pandas gelesen und versucht, nach Synonymen zu suchen
Python> sys.path> Liste der Zeichenfolgen, die den Pfad für die Suche nach Modulen angeben
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ich habe 6 Methoden gemessen, um den Index des Maximalwerts (Minimalwerts) der Liste zu erhalten
[Python of Hikari-] Kapitel 05-09 Steuerungssyntax (Verwendung von for-Anweisung und while-Anweisung ordnungsgemäß)
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe den Akkord des Songs mit word2vec vektorisiert und mit t-SNE visualisiert
Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap